【问题标题】:Numpy - float32 gives different value from dtype="float32" in arrayNumpy - float32 在数组中给出与 dtype="float32" 不同的值
【发布时间】:2017-05-11 09:42:57
【问题描述】:

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)

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

【问题讨论】:

标签: python numpy


【解决方案1】:

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

>>> 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

【讨论】:

    【解决方案2】:

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

    关于浮点数的有限精度的评论也需要考虑 :-) 你几乎永远不会在浮点数中找到相等性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-17
      • 2021-07-19
      • 2016-11-16
      • 1970-01-01
      • 1970-01-01
      • 2018-01-06
      • 1970-01-01
      • 2019-11-08
      相关资源
      最近更新 更多