精度差异:NumPy对象数组与Float数组

2024-06-01 05:12:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道NumPy浮点数组元素的精度受机器epsilon的限制。在

但是,我很难理解为什么将数组的数据类型指定为Python对象而不是默认的float,会导致数组存储我提供给它的精确值。有人能解释一下这种行为吗?在

下面的代码说明了与float数据类型相关的舍入错误,以及使用object数据类型时精度的变化。在

import numpy as np

np.set_printoptions(precision=64)

MyArray = np.empty(2)
MyArray.fill(0.442)
print(MyArray)

# [ 0.442000000000000003996802888650563545525074005126953125
#   0.442000000000000003996802888650563545525074005126953125]

MyArray_precise = np.empty(2, dtype = object)
MyArray_precise.fill(0.442)
print(MyArray_precise)

# [0.442 0.442]

我在64位Windows上运行32位python2.7.12安装。在


Tags: numpy机器元素objectnp精度数组float
2条回答

这只是你看到的显示格式问题。实际上,无论哪种方法都无法获得更精确的数字;只是您设置的precision=64显示设置不适用于对象数组。它只适用于浮点数据类型的数组。在

如果打印MyArray_precise内容的更多位数:

print(format(MyArray_precise[0], '.64'))
# 0.442000000000000003996802888650563545525074005126953125

您将看到它实际上并不比另一个数组好。在

我同意你的浮动问题是一个显示的问题,而不是精度的问题。在

但长整型有一个不同的问题。Python的long integer类型没有numpy数据类型。在

In [87]: x=12312312312311231231241241242342
In [88]: x
Out[88]: 12312312312311231231241241242342

这是Py3。Py2显示为12312312312311231231241241242342L

^{pr2}$

相关问题 更多 >