#include <armadillo>
int main(){
auto mat=arma::mat(5,5).fill(1);
mat(1,1)=NAN;
arma::mean(mat).print();
}
结果为【1,NAN,1,1,1】。 但我希望犰狳忽略像NAN这样的非法值,并得到结果【1,1,1,1,1】。 我该怎么办?有人可以帮助我吗?提前非常感谢您。
我们可以使用子矩阵视图来实现这个目标。
// Replace the NaN in the current column with the average
void ImputeColWithMean(arma::vec& col_vec) {
// Get the non-NaN element index of the current column
arma::uvec indices = arma::find_finite(col_vec);
// Calculate the mean of non-NaN elements in the current column
double col_mean = arma::mean(col_vec.elem(indices));
// Replace the NaN in the current column with the average
col_vec.replace(arma::datum::nan, col_mean);
}
int main(){
// Here is the matrix
arma::mat A{{1, arma::datum::nan}, {arma::datum::nan, 2}, {3, 2}};
// Perform operations on each column of the matrix
A.each_col([](arma::vec& vec) { ImputeWithMean(vec); });
return 0;
}