用相同的值替换特定行中的所有NaN - Matlab

时间:2014-11-20 17:41:08

标签: arrays matlab matrix replace nan

我有一个如下所示的数组(data2winner):

第1至6栏

1.0894    1.1923    1.0238    1.0625    1.0222    0.9701
1.0000    1.2419    1.2093    0.9412    0.9783    1.0923
1.0379       NaN    1.0000    1.0417    1.0667    1.0000

第7至12栏

0.9661    0.9568    1.0400    0.8519    0.8675    0.9821
0.7895    1.0000       NaN    1.0000    1.1250    0.8182
1.0667    0.7714       NaN    1.0000    0.9383    1.1111

我想用相同的值替换同一行中的所有NaN(例如第3行),假设为0.5,这样输出如下所示:

第1至6栏

1.0894    1.1923    1.0238    1.0625    1.0222    0.9701
1.0000    1.2419    1.2093    0.9412    0.9783    1.0923
1.0379       **0.5**    1.0000    1.0417    1.0667    1.0000

第7至12栏

0.9661    0.9568    1.0400    0.8519    0.8675    0.9821
0.7895    1.0000       NaN    1.0000    1.1250    0.8182
1.0667    0.7714       **0.5**    1.0000    0.9383    1.1111

我知道我可以使用这个替换我的矩阵中的所有NaN:

  

data2winner(isnan(data2winner)) = 0.5

所以我想用

  

data2winner(isnan(data2winner(3,:))) = 0.5

会解决我的问题,但它不起作用。有人知道如何解决我的问题吗?任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:3)

isnan(data2winner(3,:))为您提供1和0的逻辑数组,其中NaNs在第三行中分别存在或不存在。然后,您需要索引到输入矩阵的第三行,并选择具有NaNs(来自isnan输出的那些)的列,并将它们设置为0.5。你的错误是索引到完整矩阵而不是第三行。

因此,应该这样做 -

row_id = 3;
data2winner(row_id,isnan(data2winner(row_id,:))) = 0.5