2014-07-09 29 views
5

是否有可能像Matlab一样在Eigen中掩盖数组?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

我发现这里有一定的参考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(); 

但它不是一个通用的解决方案(实际上是我不能尝试)

5

Quick Reference

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

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

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

但结果将充满0,所以这是你得到的结果相同(arrayA> 5).cast () – lib

+0

无论如何,对于等价的matlab B(A> 5)= A(A> 5) – lib