2013-04-10 3 views
6

Ich Portierung einige MATLAB Code C++ die Vorlagenbibliothek Eigen 3 verwendet wird, und ich bin auf der Suche nach eine gute Abbildung für diese gemeinsame MATLAB Idiom:Wie kann ich "<array-of-true-or-false> = <array><= <scalar>" mit Eigen 3 ausdrücken?

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

ans = 

    1  1  1  0  0 

So vergleichen ein Array und ein Skalar und gibt ein Boolesches Array mit der gleichen Form zurück.

Ich verstehe, dass Eigens Array Klasse Koeffizienten-Vergleichsoperatoren hat, aber wenn ich die Dokumente richtig interpretiere, arbeiten sie nur mit einem anderen Array; nicht mit skalaren Werten.

Gibt es eine Option, die ich verpasst habe, die den Vergleich mit einem Skalar durchführt? Oder, wenn das nicht gelingt, eine nette idiomatische Art, ein geeignet geformtes Array zu erzeugen, das mit dem Skalarwert für die RHS des Ausdrucks gefüllt ist?

Antwort

7

Mit Dank an ChriSopht_ vom #eigen IRC-Kanal:

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

also der Trick .array() wird unter Verwendung von Koeffizienten weiseen Betreibern zu bekommen, und natürlich dann immer den Rückgabetyp rechts ...

+0

Wenn Sie nicht mit dem Rückgabetyp arbeiten möchten und C++ 11 verwenden, können Sie auch 'auto result = compareMat.array() <= cutoff;' verwenden. – GJStein