我有一个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
问题是精确的吗?
答案 0 :(得分:6)
问题在于np.float32
与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
这样的东西,两个参数都是非标量的 数组,它们将使用通用数据类型。这就是原因(arr > np.array([np.pi]))[3154950]
返回True
。