2016-07-26 33 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