Ant*_*nov 0 python floating-point numpy nan
在这里,我有以下几点:
>>> import numpy as np
>>> q = np.nan
>>> q == np.nan
False
>>> q is np.nan
True
>>> q in (np.nan, )
True
Run Code Online (Sandbox Code Playgroud)
所以,问题是:为什么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 ==元组中的任何对象。
| 归档时间: |
|
| 查看次数: |
556 次 |
| 最近记录: |