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

StackOverflow https://stackoverflow.com/questions/15938229

  •  03-04-2022
  •  | 
  •  

Вопрос

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?

Это было полезно?

Решение

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…

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top