2016-07-26 68 views
8

給定一個矩陣工作: -爲什麼更換矩陣NaN的不包括K(K == NAN)= SomeNumber,其中k爲矩陣操作

k = [1 2 3 ; 
    4 5 6 ; 
    7 8 NaN]; 

如果我想更換號碼,說2,用0,我可以用這個:k(k==2) = 0。它工作正常,並給出了以下預期的答案: -

k = 

    1  0  3 
    4  5  6 
    7  8 NaN 

但爲什麼這個不是,如果我試圖取代NaN工作,即k(k==NaN) = 0給出了這樣的:

k = 

    1  2  3 
    4  5  6 
    7  8 NaN 

雖然我能夠實現預期結果使用:k(isnan(k))=0。但爲什麼第一種方法不起作用?

回答

16

因爲NaN==NaN0

不是一個數字不等於不是一個數字?不是,它們不是數字,但不一定是相同的東西。這是設計。

0/0 == Inf-Inf?絕對不是。雖然兩者都是NaN

Read more here

+1

另外,作爲由所提到的鏈路,'的NaN〜= NaN'給出'1'這似乎乍一看怪異!!但現在它是有道理的。謝謝! –

+0

請參閱'NaN'文檔的[更多關於](http://www.mathworks.com/help/matlab/ref/nan.html#moreabout)部分。 – excaza

+3

經驗教訓。 'NaN == NaN'實現未定義。總是使用'isnan'來檢查'NaN'。 – rayryeng