如何正确计算犰狳中具有“NAN”值的垫子的平均值

问题描述 投票:0回答:1
#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】。 我该怎么办?有人可以帮助我吗?提前非常感谢您。

c++ armadillo
1个回答
0
投票

我们可以使用子矩阵视图来实现这个目标。

// 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;
}
© www.soinside.com 2019 - 2024. All rights reserved.