在这里,我有以下内容:
>>> import numpy as np
>>> q = np.nan
>>> q == np.nan
False
>>> q is np.nan
True
>>> q in (np.nan, )
True
那么,问题是:为什么nan不等于nan,而是nan?
(唯一)为什么 '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
==
元组中的任何对象。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)