[英]Why does comparing to nan yield False (Python)?
在这里,我有以下几点:
>>> import numpy as np
>>> q = np.nan
>>> q == np.nan
False
>>> q is np.nan
True
>>> q in (np.nan, )
True
所以,问题是:为什么nan不等于nan,而是nan? (UNIQUE) 为什么“in”返回True? 我似乎无法追踪 nan 的实现。 它引导我到 C:\\Python33\\lib\\site-packages\\numpy\\core\\umath.pyd(行 NAN = nan),但是从那里没有可追踪的方法来找出 nan 实际上是什么。
numpy
的创建者认为,与nan
大多数比较(包括==
)应该产生False
是最有意义的。 你可以在 Python 中通过为你的对象定义一个__eq__(self, other)
方法来做到这一点。 选择这种行为只是因为它是最有用的,用于各种目的。 毕竟,一个条目有缺失值而另一个条目也有缺失值这一事实并不意味着这两个条目相等。 它只是暗示您不知道它们是否相等,因此最好不要将它们视为相等(例如,当您通过配对相应的行将两个表连接在一起时)。
is
,另一方面是一个Python关键字不能由被覆盖numpy
。 它测试两个对象是否是同一个东西。 nan
是相同的对象nan
。 无论如何,这也是有用的行为,因为通常您会想要例如摆脱所有没有值的条目,而您可以使用is not nan
实现。
nan in (nan,)
返回 True 因为您可能知道, (nan,)
是一个只有一个元素nan
的元组,并且当 Python 检查某个对象是否in
元组中时,它会检查该对象是否is
or
==
元组中的任何对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.