use*_*665 7 python arrays floating-point numpy floating-accuracy
我有一个numpy数组arr.这是一个numpy.ndarray,大小是(5553110,),dtype=float32.
当我做:
(arr > np.pi )[3154950]
False
(arr[3154950] > np.pi )
True
Run Code Online (Sandbox Code Playgroud)
为什么第一次比较错了?我该如何解决?
价值:
arr[3154950]= 3.1415927
np.pi= 3.141592653589793
Run Code Online (Sandbox Code Playgroud)
问题是精确的吗?
问题是由于np.float32vs的准确性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
Run Code Online (Sandbox Code Playgroud)
正如@WarrenWeckesser评论:
它涉及numpy如何决定投射其操作的参数.显然,使用时
arr > scalar,标量将转换为与数组相同的类型arr,在本例中为np.float32.另一方面,使用arr > arr2两个参数非标量数组,它们将使用通用数据类型.这就是原因(arr > np.array([np.pi]))[3154950]返回True.
| 归档时间: |
|
| 查看次数: |
88 次 |
| 最近记录: |