2014-07-09 8 views
5

Czy można maskować tablicę w Eigenie jak w Matlabie?Eigen: maskowanie tablicy

Coś

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

gdzie arrayB jest wektorem wiersz zawierający wszystkie i tylko te elementy Arraya> 5

mogę znaleźć podobne wnioski, ale nie każdy uaktualniony odpowiedź po roku 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)

Odpowiedz

2

znalazłem pewne odniesienia tutaj http://igl.ethz.ch/projects/libigl/matlab-to-eigen.html

dla B = IM (A), sugerują:

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

Ale to nie jest uogólnione rozwiązanie (a właściwie nie mogłem spróbować)

5

Z Quick Reference

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

tak w twoim przypadku będzie to

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

Ale wynik będzie pełny 0, więc jest to ten sam wynik, który otrzymujesz (arrayA> 5) .cast () – lib

+0

W każdym razie dobrze wiedzieć za odpowiednik matlab B (A> 5) = A (A> 5) – lib