Проверка Если все записи в матрице равен нулю в библиотеке EIGEN
Вопрос
Прежде всего, я не уверен, что это возможно.Я хотел бы проверить, будет ли матрица нулевой или нет в библиотеке собственной библиотеки (Примечание: я должен объявить его).Мое решение должно проверить, нулевые ли все элементы.Мой вопрос есть ли другой способ выполнять эту задачу, сохраняя размер матрицы без изменений?
#include <iostream>
#include <Eigen/Dense>
// true if it is empty, false if not
bool isEmpty(Eigen::MatrixXd& Z)
{
bool check = true;
for (int row(0); row < Z.rows(); ++row)
for (int col(0); col < Z.cols(); ++col){
if ( Z(row,col) != 0 ){
check = false;
break;
}
}
return check;
}
int main()
{
Eigen::MatrixXd Z(3,3);
if ( isEmpty(Z) )
std::cout << Z.size() << std::endl;
else
Z.setZero(0,0); // resize the matrix (not clever way I know)
std::cin.get();
return 0;
}
. Решение
Вы можете установить все коэффициенты на Zeros, не изменяя размер матрицы с:
Z.setZero();
.
Вы можете проверить, что все коэффициенты равны нулю с:
bool is_empty = Z.isZero(0);
.
Здесь аргумент - это относительная точность, чтобы убедиться, что число является численным нулем.Смотрите Это DOC .
Не связан с StackOverflow