Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I express "<array-of-true-or-false> = <array> <= <scalar>" using Eigen 3?

I am porting some MATLAB code to C++ using the Eigen 3 template library, and I am looking for a good mapping for this common MATLAB idiom:

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

ans =

     1     1     1     0     0

So, compare an array and a scalar, returning an array of booleans that has the same shape.

I understand that Eigen's Array class has coefficient-wise comparison operators, but if I'm interpreting the docs correctly they only work with another array; not with scalar values.

Is there some option I've missed that will perform the comparison with a scalar? Or failing that, a nice idiomatic way to create an appropriately-shaped Array filled with the scalar value for the RHS of the expression?

like image 335
Kaelin Colclasure Avatar asked Apr 10 '13 23:04

Kaelin Colclasure


1 Answers

With thanks to ChriSopht_ from the #eigen IRC channel:

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

So, the trick is using .array() to get at coefficient-wise operators, and of course then getting the return type right…

like image 133
Kaelin Colclasure Avatar answered Oct 23 '22 07:10

Kaelin Colclasure