静かなる名辞

pythonとプログラミングのこと


nan同士の同値性比較はFalseになる

 nanをイコールで比較しようとしてもうまくいきません。nanはなにと比較しても(自分同士の比較でも)Falseになるような性質を持っているからです。

>>> import numpy as np
>>> np.nan == np.nan
False

 pythonに限らず、おそらく大半のプログラミング言語で同様の仕様のはずです。

 細かい話はここなどに載っています。

NaN === NaN が false な理由とutil.isDeepStrictEqual - from scratch

 だからisnanなんて関数を用意している、ということですね。

 x == np.nanみたいなものを書くとハマるので注意が必要です。

 この関係で、numpy配列で比較を行う場合は工夫が必要になります。
numpyでnanを含む配列の同値性をちゃんと計算する - 静かなる名辞

 nanは厄介なので、いろいろ気をつける必要があるということですね。