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