阵列比较在numpy中与元素的比较匹配



我有一个numpy数组arr。这是numpy.ndarray,大小为(5553110,)dtype=float32

当我这样做时:

(arr > np.pi )[3154950]
False
(arr[3154950] > np.pi )
True

为什么第一个比较弄错了?我该如何解决?

值:

arr[3154950]= 3.1415927
np.pi= 3.141592653589793

是精确的问题吗?

问题是由于 np.float32 vs np.float64的准确性。

使用np.float64,您不会看到问题:

import numpy as np
arr = np.array([3.1415927], dtype=np.float64)
print((arr > np.pi)[0])  # True
print(arr[0] > np.pi)    # True

作为@warrenweckesser评论:

它涉及Numpy决定施放其操作的论点。 显然,使用arr > scalar,标量转换为同一 键入数组arr,在这种情况下为np.float32。在另一 手,诸如arr > arr2之类的东西,两个参数nonscalar 数组,他们将使用常见的数据类型。这就是为什么(arr > np.array([np.pi]))[3154950]返回True

相关的github问题

最新更新