特征:掩盖一个数组

时间:2014-07-09 13:19:23

标签: c++ eigen

是否可以在Matlab中屏蔽Eigen中的数组?

这样的东西
ArrayXd arrayA = ArrayXd::Random(10, 5);
ArrayXi mask = ArrayXi::Zero(arrayA.rows(), arrayA.cols());
mask = arrayA > 5;
ArrayXd arrayB = arrayA(mask)

其中arrayB是一个行向量,包含所有且仅包含arrayA> 5

的元素

我可以找到类似的请求,但2011年之后没有任何更新的答案(https://forum.kde.org/viewtopic.php?f=74&t=98382https://forum.kde.org/viewtopic.php?f=74&t=98093https://forum.kde.org/viewtopic.php?f=74&t=97652

2 个答案:

答案 0 :(得分:7)

来自Quick Reference

(R.array() < s).select(P,Q);  // (R < s ? P : Q)

所以,在你的情况下,它将是

(arrayA > 5).select(mask, arrayA)

答案 1 :(得分:3)

我在这里找到了一些参考http://igl.ethz.ch/projects/libigl/matlab-to-eigen.html

对于B = IM(A),他们建议:

B = A.unaryExpr(bind1st(mem_fun( 
    static_cast<VectorXi::Scalar&(VectorXi::*)(VectorXi::Index)>
    (&VectorXi::operator())), &IM)).eval();

但它不是一个普遍的解决方案(实际上我无法尝试)