numpy数组元素会自动四舍五入吗?
我在Python里有一个包含浮点数的numpy数组。
当我打印这个数组时,第一个值是:
[7.14519700e+04, ....
但是,如果我单独打印第一个值,输出的结果是:
71451.9699799
显然,这两个数字应该是一样的,所以我在想,数组是不是只给我显示了这个元素的一个四舍五入的版本?这里第二个数字有12位有效数字,而第一个只有9位。
我只是想知道,为什么这两个数字会不一样呢?
2 个回答
4
在numpy数组中,数据类型是非常明确的。你可以通过查看数组的 numpy.dtype
属性来了解它们是如何存储的。
举个例子:
import numpy
a = numpy.zeros(10)
print a.dtype
这会显示 float64
,也就是一个64位的浮点数。
你可以通过常用的dtype参数,或者dtype的 type
对象(也就是用来定义dtype的东西)来明确指定数组的数据类型。
a = numpy.zeros(10, dtype='complex32') # a 32-bit floating point
b = numpy.longdouble(a) # create a long-double array from a
关于打印输出,这只是格式化的问题。你可以通过 numpy.set_printoptions
来调整numpy打印数组的方式:
>>> a = numpy.random.randn(3) # for interest, randn annoyingly doesn't support the dtype arg
>>> print a
[ 0.12584756 0.73540009 -0.17108244 -0.96818512]
>>> numpy.set_printoptions(precision=3)
>>> print a
[ 0.126 0.735 -0.171 -0.968]
8
这只是打印出来的效果问题,不是存储的问题。可能会让人困惑的是,第一个例子用了numpy的打印精度设置,而第二个例子用了普通Python的打印设置。
你可以通过以下方式调整numpy的精度和打印:
numpy.set_printoptions(precision=20)
print myarray`
(根据你的需要调整精度),或者在标准Python格式化打印中选择有效数字的位数:
print ('%.20f' % myarray[0])
数字的内部表示方式始终是一样的。