2013-04-10 13 views
6

jestem przenoszenie trochę MATLAB kod do C++ używając Eigen 3 biblioteki szablonów i szukam dobrego odwzorowania dla tej wspólnej MATLAB idiom:Jak wyrazić "<tablica-prawdziwego-lub-fałszu> = <array><= <scalar>" używając Eigen 3?

K>> [1 2 3 4 5] <= 3 

ans = 

    1  1  1  0  0 

Więc porównywania array i skalar, zwracając tablicę binarek o tym samym kształcie.

Rozumiem, że klasaEigen'a ma klasę współczynników, ale jeśli dobrze interpretuję dokumenty, działają tylko z inną tablicą; nie z wartościami skalarnymi.

Czy jest jakaś opcja, którą przeoczyłem, która wykona porównanie z skalarem? A może nie jest to dobry, idiomatyczny sposób tworzenia odpowiednio ukształtowanego Array wypełnionego wartością skalarną dla RHS wyrażenia?

Odpowiedz

7

Z podziękowaniami dla ChriSopht_ z kanału #eigen IRC:

VectorXd compareMat = ...; 
double cutoff = 3; 
Matrix<bool, Dynamic, 1> result = compareMat.array() <= cutoff; 

Więc trik korzysta .array() dostać na operatorów współczynnik mądry, i oczywiście potem coraz odpowiedni rodzaj powrotu ...

+0

Jeśli nie chcesz zajmować się typem zwracania i używasz C++ 11, zawsze możesz użyć 'auto result = compareMat.array() <= cutoff;'. – GJStein