为什么替换矩阵的NaN不能用k(k == NaN)= SomeNumber,其中k是要操作的矩阵

Sar*_*ama 7 matlab

给定一个矩阵: -

k = [1   2   3  ;
     4   5   6  ;
     7   8  NaN];
Run Code Online (Sandbox Code Playgroud)

如果我想用0替换一个数字,比如2,我可以使用:k(k==2) = 0.它工作正常,并给出以下预期答案: -

k =

     1     0     3
     4     5     6
     7     8   NaN
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试替换NaN,为什么这不起作用,即k(k==NaN) = 0给出:

k =

     1     2     3
     4     5     6
     7     8   NaN
Run Code Online (Sandbox Code Playgroud)

虽然我能够使用以下方法获得所需的结果:k(isnan(k))=0.但为什么第一种方法不起作用?

And*_*uri 17

因为NaN==NaN0.

不是数字不等于数字?不是真的,它们不是数字,但不一定是同一个东西.这是设计的.

0/0 == Inf-Inf吗?绝对不是.两者都是NaN.

在这里阅读更多

  • 学过的知识.`NaN == NaN`是未定义的实现.始终使用`isnan`来检查`NaN`. (3认同)