在特征库中检查矩阵中的所有项是否为零

Checking if all entries in the matrix are zero in Eigen Library

本文关键字:是否 特征 检查      更新时间:2023-10-16

首先,我不确定这是否可能。我想检查矩阵是否为零或不在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;
}

您可以将所有系数设置为零而不改变矩阵大小:

Z.setZero();

可以检查所有系数是否为零:

bool is_empty = Z.isZero(0);

这里的实参是检查一个数字是否为数字零的相对精度。