Numpy - float32在数组中给出dtype =“float32”的不同值

时间:2017-05-11 09:42:57

标签: python numpy

Numpy Float32值的不同取决于是在数组内启动还是作为独立的float32:

>>> numpy.array([75.09], dtype="float32")
array([ 75.08999634], dtype=float32)
>>> numpy.float32(75.09)
75.089996

我需要能够在数组中搜索float32值。由于最后两位额外数字,目前找不到值。我也尝试过:

>>> numpy.array([75.09], dtype="float32").round(decimals=6)
array([ 75.08999634], dtype=float32)

>>> numpy.around(numpy.array([75.09], dtype="float32"), decimals=6)
array([ 75.08999634], dtype=float32)

但是你可以看到输出仍然包含最后两位数字。

2 个答案:

答案 0 :(得分:3)

这些数字(很可能)是相同的,只是对象被格式化为字符串的问题。

>>> numpy.array([75.09], dtype="float32")[0] == numpy.float32(75.09)
True

问题(你可能已经知道)是75.09似乎需要很高的精度,甚至可能是无限的(我没有做数学,更多关于它here)。

如果你想拥有一致的文本输出,只需使用你自己的字符串格式。

>>> a = numpy.array([75.09], dtype="float32")
>>> b = numpy.float32(75.09)
>>> print 'a: [', ','.join('{:.6f}'.format(ai) for ai in a), '] b:','{:.6f}'.format(b)
a: [ 75.089996 ] b: 75.089996
>>> print 'a: [', ','.join('{:.8f}'.format(ai) for ai in a), '] b:','{:.8f}'.format(b)
a: [ 75.08999634 ] b: 75.08999634

答案 1 :(得分:0)

数字的显示是不同的,因为它们被打印为NumPy数组(1)和浮点数(2)。尝试打印第一个数组成员numpy.array([75.09], dtype="float32")[0]

关于浮点数的有限精度的评论也要考虑到:-)几乎从来没有在浮点数中找到相等。