MATLAB では、行列/配列から何らかの条件を満たす値を切り出すことが一般的です (論理インデックスと呼ばれます)。
vec = [1 2 3 4 5];
condition = vec > 3;
vec(condition) = 3;
Eigenでこれを行うにはどうすればよいですか? これまでのところ、私は持っています:
Eigen::Matrix<bool, 1, 5> condition = vec.array() > 3;
これを試してください:
#include <iostream>
#include <Eigen/Dense>
int main()
{
Eigen::MatrixXi m(1, 5);
m << 1, 2, 3, 4, 5;
m = (m.array() > 3).select(3, m);
std::cout << m << std::endl;
return 0;
}
同様の質問への回答で指摘されているように、 Eigenを使用した部分行列とインデックス、 libigl はこの機能を Eigen に追加します。
igl::slice(A,indices,B);
に等しい
B = A(indices)