如何从犰狳基质中取代NaN?

Cle*_* D. 2 c++ matlab armadillo

以下matlab代码的armadillo/c ++等价物是什么?

A(isnan(A))=b;
Run Code Online (Sandbox Code Playgroud)

hbr*_*ere 7

使用.transform()成员函数仅更改 NaN 条目。这也比使用find_nonfinite()更快,并且它将保持任何 Inf 值不变。

A.transform( [](double val) { return (std::isnan(val) ? double(b) : val); } );
Run Code Online (Sandbox Code Playgroud)

  • 更新:犰狳有 [.replace()](http://arma.sourceforge.net/docs.html#replace) 功能 (3认同)

And*_*uri 6

文档中,您可以使用has_nan()以查看是否有任何值是NaN.但是,似乎没有函数返回哪些索引是NaN的索引,因此看起来您可能需要循环,并逐个检查各个元素.

但是,如果您不担心有无限,那么您可以使用find_nonfinite( X )它来为您提供Inf和NaN值的索引.

  • 实际上我一直在寻找一种解决方案,既可以避免循环,也可以保持Inf值不变.但正如我目前DATAS不含天道酬勤值,使用find_nonfinite()的解决方案完美的作品,并将其写入A.elem(find_nonfinite(A))填写(B).谢谢 (2认同)