如何查找和替换Eigen :: Array对象中的所有非有限数字?

qua*_*ant 4 c++ eigen

假设我有一个充满双打的数组:

Eigen::Array<double,m,n> myarray;
Run Code Online (Sandbox Code Playgroud)

现在我想替换任何myarray不符合数字的元素0.0我该怎么做?

我想把它乘以一个带有零的值数组,在那里我找到无穷大,像这样:

myarray *= myarray.cwiseEqual(std::numeric_limits<double>::infinity()) == 0.0;
Run Code Online (Sandbox Code Playgroud)

并为每个无效类型执行此操作.但这真的很混乱.有没有更好的办法?

sla*_*oie 9

这是一个简单的方法:

myarray = myarray.unaryExpr([](double v) { return std::isfinite(v)? v : 0.0; });
Run Code Online (Sandbox Code Playgroud)

资料来源:[ http://eigen.tuxfamily.org/dox/classEigen_1_1ArrayBase.html#a23fc4bf97168dee2516f85edcfd4cfe7]