如何替换armadillo矩阵中的NaN?

4
以下是对应于Matlab代码的armadillo/c++等效代码是什么?
A(isnan(A))=b;
2个回答

8
使用.transform()成员函数仅更改NaN条目。这也比使用find_nonfinite()更快,而且它会保留任何Inf值不变。
A.transform( [](double val) { return (std::isnan(val) ? double(b) : val); } );

3
更新:armadillo库具有.replace()函数。 - hbrerkere

7
文档中,您可以使用has_nan()来查看是否存在NaN值。但是,似乎没有一个函数返回哪些是NaN的索引,因此看起来您可能需要循环,并逐个检查各个元素。
但是,如果您不担心存在无穷大,则可以使用find_nonfinite( X ),它将为您提供Inf和NaN值的索引。

3
实际上我正在寻找一种既避免循环又不改变Inf值的解决方案。但由于我的当前数据不包含Inf值,因此使用find_nonfinite()函数的解决方案完美地运作,并且会输出以下代码:A.elem(find_nonfinite(A)).fill(b);谢谢。 - Clement D.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接