10

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

4

3 回答 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 回答