Проверка Если все записи в матрице равен нулю в библиотеке EIGEN

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

  •  21-12-2019
  •  | 
  •  

Вопрос

Прежде всего, я не уверен, что это возможно.Я хотел бы проверить, будет ли матрица нулевой или нет в библиотеке собственной библиотеки (Примечание: я должен объявить его).Мое решение должно проверить, нулевые ли все элементы.Мой вопрос есть ли другой способ выполнять эту задачу, сохраняя размер матрицы без изменений?

#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 .

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