在这里,我有以下内容:
>>> import numpy as np
>>> q = np.nan
>>> q == np.nan
False
>>> q is np.nan
True
>>> q in (np.nan, )
True
所以,问题是:为什么nan不等于nan,而是nan? (独特)为什么'在'返回True? 我似乎无法追查到nan的实现。它引导我到C:\ Python33 \ lib \ site-packages \ numpy \ core \ umath.pyd(行NAN = nan),但是从那里找不到实际上是什么,没有可追溯的方法。
答案 0 :(得分:4)
conda install -c anaconda pylint
的创作者认为最有意义的是,与numpy
的大多数比较(包括nan
)应该产生==
。您可以通过为对象定义False
方法在Python中执行此操作。选择此行为只是因为它是最有用的,出于各种目的。毕竟,一个条目具有缺失值而另一个条目也具有缺失值的事实并不意味着这两个条目是相等的。它只是意味着你不知道他们是否平等,因此最好不要将它们视为一样(例如,当你将两张桌子连在一起时)配对相应的行。)
__eq__(self, other)
是一个Python关键字,is
无法覆盖。它测试两个对象是否相同。 numpy
与nan
是同一个对象。无论如何,这也是有用的行为,因为通常你会想要例如摆脱所有没有价值的条目,你可以用nan
来实现。
is not nan
返回True,因为您可能知道,nan in (nan,)
是一个只有一个元素(nan,)
的元组,当Python检查对象是否为nan
元组时,它正在检查该对象in
is
or
元组中的任何对象。