不应该“==”返回True吗?
In [101]: np.NAN is np.nan is np.NaN
Out[101]: True
In [102]: np.NAN == np.nan
Out[102]: False
In [103]: np.NaN == np.nan
Out[103]: False
In [104]: np.NaN == np.NAN
Out[104]: False
浮动nan 的3个表达式只是遗留的旧numpy版本还是有其他用途?
答案 0 :(得分:7)
不,不是NaN。您已找到其中一个例外情况。根据{{3}},NaN不等于任何东西,甚至不是自己:
与NaN进行比较时,即使与自身进行比较,也始终会返回无序结果。
不只是numpy表现得像这样:
>>> nan = float('nan')
>>> nan is nan
True
>>> nan == nan
False
任何根据IEEE标准实现浮点运算的编程语言。
多个拼写可以匹配名称的常用首字母。它是 Not a Number 的缩写,不同的人将缩写大写不同。
对于同一个对象, is
总是True
,但==
甚至不能保证返回布尔值。来自IEEE 754:
按照惯例,返回
False
和True
以进行成功比较。但是,这些方法可以返回任何值,因此如果在布尔上下文中使用比较运算符(例如,在if
语句的条件下),Python将在值上调用bool()
来确定是否结果是真是假。
答案 1 :(得分:3)
浮点标准(IEEE 754)要求NaN值的任何比较都不相等。这对于声称实现IEEE 754的任何编程语言都很常见,而不仅仅是Python。
另见维基百科的description of a NaN。
答案 2 :(得分:2)
引自docs,
numpy中定义的特殊值:nan,inf,
NaNs可以用作穷人的面具(如果你不关心什么的 原值是)
注意:不能使用相等来测试NaN。例如:
...
np.nan == np.nan#总是错的!请改用特殊的numpy函数。假