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

时间:2013-01-21 13:20:39

标签: matlab

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

3 个答案:

答案 0 :(得分:24)

假设你的矩阵是:

A = 
     NaN   1       6
     3     5     NaN
     4     NaN     2

您可以找到NaN元素并使用isnan替换为零,如下所示:

A(isnan(A)) = 0;

然后你的输出将是:

A =
     0     1     6
     3     5     0
     4     0     2

答案 1 :(得分:5)

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

x( isnan(x) ) = 0

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

bad = isnan(x);
x(bad) = 0;

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

答案 2 :(得分:4)

函数isnan是矢量化的,意思是:

>> A = [[1;2;NaN; 4; NaN; 8], [9;NaN;12; 14; -inf; 28 ]]
A =
     1     9
     2   NaN
   NaN    12
     4    14
   NaN  -Inf
     8    28

>> A(isnan(A)) = 0
A =
     1     9
     2     0
     0    12
     4    14
     0  -Inf
     8    28