Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Eigenの行列の各要素で,あるしきい値未満の値を0にしたい

Q&A

Closed

解決したいこと

EigenのMatrixXd の各要素にアクセスして,
その絶対値があるしきい値未満の場合に,その値を0にしたいです.
要は,下の実装と等価になるようなものをスマートに書きたいです.


  MatrixXd M(3, 3);
  M << 0.0, 1.0, -2.0, 0.0, 1.0, 2.0, 0.0, -1.0, 2.0;
  cout << M << endl;
//0  1 -2
//0  1  2
//0 -1  2

  for(int i = 0; i < M.rows(); i++)
  {
    for(int j = 0; j < M.cols(); j++)
      if(M(i, j) < abs(1.5))
        M(i, j) = 0.0;
  }

  cout << M << endl;
//0 0 0
//0 0 2
//0 0 2


おそらくarray()メソッドを使うというのは想像つくのですが,,,
ご教授のほど宜しくおねがいします.

0

1Answer

Comments

  1. @dwatanabee

    Questioner

    ありがとうございます.

    M = M.unaryExpr([](double x) { return abs(x) < 1.5 ? 0.0 : x; });

    でうまくいきました.
  2. 回答で abs の場所を間違えてましたね……修正しました。

Your answer might help someone💌