作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
这让我很困惑:
```
a=np.array([1,2,np.nan,3]) # an array with a nan
print(np.isnan(a)[2]) # it truly is a nan
print(a[2]) # it quacks like a nan
print(np.nan is np.nan) # nan's can be compared
print(a[2] is np.nan) # But then, this isn't a nan after all!!??
>>> True
>>> nan
>>> True
>>> False
```
我知道我们不允许将 nan 与 ==
进行比较,但应该允许与 is
进行比较?毕竟它在将 nan 与自身进行比较时有效吗?
感谢您对这里发生的事情的任何提示。
最佳答案
这与其说是关于 Python is
运算符的问题,不如说是关于数组元素的索引或拆箱操作:
In [363]: a=np.array([1,2,np.nan,3])
In [364]: a[2]
Out[364]: nan
In [365]: type(a[2])
Out[365]: numpy.float64
In [366]: a[2] is a[2]
Out[366]: False
a[2]
不只是返回 nan
。它返回一个 np.float64
对象,其值为 np.nan
。另一个 a[2]
将产生另一个 np.float64
对象。两个这样的对象在 is
意义上不匹配。对于任何数组元素都是如此,而不仅仅是 nan
值。
由于 ==
对 nan
不起作用,我们只能使用 np.isnan
函数。
np.nan
是一个唯一的 float
对象(在本 session 中),但 a[2]
未设置为该对象。
如果数组被定义为对象类型:
In [376]: b=np.array([1,2,np.nan,3], object)
In [377]: b[2] is np.nan
Out[377]: True
此处 is
为 True - 因为 b
包含指向内存中已存在的对象的指针,包括 np.nan
对象。对于像这样构造的列表也是如此。
关于python - numpy NaN 并不总是被认可,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52123892/
我是一名优秀的程序员,十分优秀!