C++实现MATLAB中mapminmax函数
时间: 2024-02-20 12:58:28 浏览: 69
MATLAB中的mapminmax函数用于将矩阵归一化到指定的范围内。C++中可以通过以下代码实现类似的功能:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<vector<double> > mapminmax(vector<vector<double> > &matrix, double min_val, double max_val) {
int rows = matrix.size();
int cols = matrix[0].size();
vector<double> min_vals(cols, numeric_limits<double>::max());
vector<double> max_vals(cols, numeric_limits<double>::min());
// 计算每列的最小值和最大值
for (int j = 0; j < cols; j++) {
for (int i = 0; i < rows; i++) {
if (matrix[i][j] < min_vals[j]) {
min_vals[j] = matrix[i][j];
}
if (matrix[i][j] > max_vals[j]) {
max_vals[j] = matrix[i][j];
}
}
}
// 归一化处理
vector<vector<double> > result(rows, vector<double>(cols));
for (int j = 0; j < cols; j++) {
double range = max_vals[j] - min_vals[j];
for (int i = 0; i < rows; i++) {
result[i][j] = (matrix[i][j] - min_vals[j]) / range * (max_val - min_val) + min_val;
}
}
return result;
}
int main() {
vector<vector<double> > matrix = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
double min_val = 0, max_val = 1;
vector<vector<double> > result = mapminmax(matrix, min_val, max_val);
for (auto row : result) {
for (auto val : row) {
cout << val << " ";
}
cout << endl;
}
return 0;
}
```
该代码中,`mapminmax`函数的参数为需要归一化的矩阵、归一化后的最小值和最大值,返回值为归一化后的矩阵。首先,计算每列的最小值和最大值,然后对每个元素进行归一化处理。在归一化处理中,先将元素减去最小值,然后除以最大值和最小值的差,再乘以归一化后的范围,最后加上最小值即可得到归一化后的结果。
阅读全文
相关推荐


















