2014-11-20 66 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

相關問題