为什么比较nan产量为False(Python)?

时间:2017-03-17 11:34:51

标签: python numpy

在这里,我有以下内容:

>>> 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),但是从那里找不到实际上是什么,没有可追溯的方法。

1 个答案:

答案 0 :(得分:4)

conda install -c anaconda pylint 的创作者认为最有意义的是,与numpy的大多数比较(包括nan)应该产生==。您可以通过为对象定义False方法在Python中执行此操作。选择此行为只是因为它是最有用的,出于各种目的。毕竟,一个条目具有缺失值而另一个条目也具有缺失值的事实并不意味着这两个条目是相等的。它只是意味着你不知道他们是否平等,因此最好不要将它们视为一样(例如,当你将两张桌子连在一起时)配对相应的行。)

另一方面,

__eq__(self, other)是一个Python关键字,is无法覆盖。它测试两个对象是否相同。 numpynan是同一个对象。无论如何,这也是有用的行为,因为通常你会想要例如摆脱所有没有价值的条目,你可以用nan来实现。

is not nan返回True,因为您可能知道,nan in (nan,)是一个只有一个元素(nan,)的元组,当Python检查对象是否为nan元组时,它正在检查该对象in is or元组中的任何对象。