我知道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安装。在
这只是你看到的显示格式问题。实际上,无论哪种方法都无法获得更精确的数字;只是您设置的
precision=64
显示设置不适用于对象数组。它只适用于浮点数据类型的数组。在如果打印
MyArray_precise
内容的更多位数:您将看到它实际上并不比另一个数组好。在
我同意你的浮动问题是一个显示的问题,而不是精度的问题。在
但长整型有一个不同的问题。Python的long integer类型没有
numpy
数据类型。在这是Py3。Py2显示为
^{pr2}$12312312312311231231241241242342L
相关问题 更多 >
编程相关推荐