假设我有一个充满双打的数组:
Eigen::Array<double,m,n> myarray;
现在我想要替换myarray
的任何元素,这些元素不是数字0.0
,我该怎么做?
我想把它乘以一个带有零的值数组,在那里我找到无穷大,就像这样:
myarray *= myarray.cwiseEqual(std::numeric_limits<double>::infinity()) == 0.0;
为每个无效类型执行此操作。但这真的很混乱。还有更好的方法吗?
答案 0 :(得分:9)
这是一种简单的方法:
myarray = myarray.unaryExpr([](double v) { return std::isfinite(v)? v : 0.0; });
来源: [http://eigen.tuxfamily.org/dox/classEigen_1_1ArrayBase.html#a23fc4bf97168dee2516f85edcfd4cfe7]