2014-11-20 64 views
2

我有一个数组(data2winner),看起来像这样:替换所有NaN在特定行具有相同的值 - Matlab的

列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 

我想用相同的值替换同一行(例如第3行)中的所有NaN,可以说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 

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

data2winner(isnan(data2winner)) = 0.5

所以我想使用

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

会解决我的问题,但它不工作。有人有一个想法如何解决我的问题?任何帮助将不胜感激!

回答

3

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

因此,这应该做到这一点 -

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

非常感谢!完美的作品 – Markus 2014-11-20 19:50:05