gpt4 book ai didi

python - numpy NaN 并不总是被认可

转载 作者:太空狗 更新时间:2023-10-30 02:07:19 27 4
gpt4 key购买 nike

这让我很困惑:

```
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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com