2016-11-10 5 views
0

Я хотел бы выполнять операции с использованием Eigen::SparseMatrix<bool>, не зацикливая сами матрицы. Это было возможно в Eigen 3.2, но этот код больше не компилируется в версии 3.3. Например, следующий код работал отлично в 3.2:eigen 3.3 SparseMatrix <bool> Операции

Eigen::SparseMatrix<bool> a(3,3), b(3,3), c(3,3); 
a = b + c; 

Есть простой/короткий способ делать «и» и «или» операции в Эйгене 3.3 без написания петли?

ответ

0

Чтобы соответствовать стандартным поведениям C++, добавление логических матриц теперь возвращает целочисленные выражения, но в то же время из-за неоднозначности добавления булевых матриц устарело. С плотными матрицами у вас есть доступ к операторам || и && для этой цели, и они также должны быть добавлены в разреженные матрицы (для 3.3.1).

Между тем, вы можете обойти литье результата в BOOL (и игнорировать устаревшее предупреждение):

a = (b+c).cast<bool>(); 
+0

Это работает! Спасибо! –

 Смежные вопросы

  • Нет связанных вопросов^_^