[Eigen中有一个非常有用的函数,称为isFinite,它在矩阵上进行迭代,检查NAN和INF的适当值,并以此方式使用:
#include <iostream>
#include <Eigen/Dense>
#include <vector>
#include <numeric>
namespace eig = Eigen;
int main() {
eig::MatrixXd e(2, 2);
e << 8.0, std::nan("1"), std::numeric_limits <double> ::infinity(), 4.0;
std::cout << e << std::endl;
e = (e.array().isFinite()).select(e, 0.0);
std::cout << e << std::endl;
return 0;
}
// Output:
//
// 8 nan
// inf 4
// 8 0
// 0 4
还有一个名为isZero的函数,但是应用于矩阵时,它仅返回布尔值。我的问题是,是否有一个函数与isFinite一样,但是会检查值,例如零?
如果您想逐个元素地检查零,则可以简单地编写
(e.array()==0)
检查浮点值是否相等时要注意通常的注意事项。
要检查较小的数字,您可以写类似的东西
(e.array().abs() < 1e-10)