我有一个想法,通过循环遍历每个 NaN 并使用 isnan 来替换矩阵中的所有 NaN。但是,我怀疑这会使我的代码运行得比它应该运行的更慢。有人可以提供更好的建议吗?
问问题
10711 次
3 回答
25
假设您的矩阵是:
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
于 2013-01-21T13:25:05.440 回答
5
如果x
是您的矩阵,则使用该isnan
函数来索引数组:
x( isnan(x) ) = 0
如果您分两步执行此操作,则可能会更清楚地看到发生了什么。首先创建一个真/假值数组,然后使用它将选定元素设置为零。
bad = isnan(x);
x(bad) = 0;
这是非常基本的东西。您最好阅读一些有关 MATLAB 的在线教程以加快速度。
于 2013-01-21T13:24:36.720 回答
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
于 2013-01-21T13:25:08.983 回答