我有一个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问题