用零替换所有NaN而不绕过整个矩阵?

use*_*ica 9 matlab

我想通过循环遍历每个NaN并使用isnan来替换矩阵中的所有NaN.但是,我怀疑这会使我的代码运行速度比应该的慢.有人可以提供更好的建议吗?

Heb*_*odo 24

假设你的矩阵是:

A = 
     NaN   1       6
     3     5     NaN
     4     NaN     2
Run Code Online (Sandbox Code Playgroud)

您可以使用以下方法找到NaN元素并将其替换为零isnan:

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

然后你的输出将是:

A =
     0     1     6
     3     5     0
     4     0     2
Run Code Online (Sandbox Code Playgroud)


Jus*_*tin 5

如果x是你的矩阵,那么使用isnan函数索引数组:

x( isnan(x) ) = 0
Run Code Online (Sandbox Code Playgroud)

如果你分两步完成,可能会更清楚地看到发生了什么.首先创建一个true/false值数组,然后使用它将所选元素设置为零.

bad = isnan(x);
x(bad) = 0;
Run Code Online (Sandbox Code Playgroud)

这是非常基本的东西.您最好阅读一些关于MATLAB的在线教程以加快速度.