2014-07-09 19 views
5

Kann ein Array in Eigen wie in Matlab maskiert werden?Eigen: ein Array maskieren

So etwas wie

ArrayXd arrayA = ArrayXd::Random(10, 5); 
ArrayXi mask = ArrayXi::Zero(arrayA.rows(), arrayA.cols()); 
mask = arrayA > 5; 
ArrayXd arrayB = arrayA(mask) 

wo arrayB ein Zeilenvektor ist alles enthalten, und nur die Elemente von arraya> 5

ich Ähnliche Anträge finden kann, aber keine aktualisierte Antwort nach 2011 (https://forum.kde.org/viewtopic.php?f=74&t=98382, https://forum.kde.org/viewtopic.php?f=74&t=98093, https://forum.kde.org/viewtopic.php?f=74&t=97652)

Antwort

2

fand ich einen Hinweis hier http://igl.ethz.ch/projects/libigl/matlab-to-eigen.html

Für B = IM (A), schlagen sie vor: so

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

Aber es ist nicht eine allgemeine Lösung (und tatsächlich konnte ich es nicht ausprobiert)

5

Vom Quick Reference

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

in Ihrem Fall wäre es

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

Aber das Ergebnis wird voller 0 sein, so ist es das gleiche Ergebnis, das Sie mit bekommen (arraya> 5) .cast () – lib

+0

Trotzdem gut zu wissen für das Äquivalent von Matlab B (A> 5) = A (A> 5) – lib