2013-04-10 4 views
6

Я портирование некоторых MATLAB кода для C++, используя библиотеку шаблонов Эйгена 3, и я ищу хорошее отображение для этого общего MATLAB идиомы:Как выразить «<массив-of-true-or-false> = <array><= <scalar>« используя Eigen 3?

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

ans = 

    1  1  1  0  0 

Таким образом, сравнить массив и скаляр, возвращая массив логических элементов, которые имеют одинаковую форму.

Я понимаю, что Eigen's Класс Array имеет коэффициенты сравнения, но если я правильно интерпретирую документы, они работают только с другим массивом; не со скалярными значениями.

Есть ли какой-то вариант, который я пропустил, выполнит сравнение со скаляром? Или, если это не так, хороший идиоматический способ создания подходящего массива Array, заполненного скалярным значением для RHS выражения?

ответ

7

С благодарностью ChriSopht_ из #eigen IRC канала:

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

Таким образом, трюк использует .array(), чтобы получить на коэффициент-накрест оператор, и тогда, конечно, получить право типа возвращаемого значения ...

+0

Если вы не хотите иметь дело с типом возврата, и вы используете C++ 11, вы всегда можете использовать 'auto result = compareMat.array() <= cutoff;'. – GJStein