数组比较不匹配numpy中的元素比较

时间:2018-04-26 15:46:53

标签: python arrays numpy floating-point floating-accuracy

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

问题是精确的吗?

1 个答案:

答案 0 :(得分:6)

问题在于np.float32np.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

Related github issue