【问题标题】:Strange behavior of numpy.roundnumpy.round 的奇怪行为
【发布时间】:2017-12-14 17:34:35
【问题描述】:

Python 的 round() 在面对 x.5 数字时似乎总是四舍五入:

print round(1.5),round(2.5),round(3.5),round(4.5)
>>> 2.0 3.0 4.0 5.0

但是numpy.round()好像不一致:

import numpy as np
print np.round(1.5),np.round(2.5),np.round(3.5),np.round(4.5)
>>> 2.0 2.0 4.0 4.0

这可能会在某些情况下引入错误。这是一个错误还是我错过了什么?

【问题讨论】:

  • 为了更快的二进制计算,它会四舍五入到最接近的偶数。
  • 值得注意的是,这种行为在 Python 2 和 Python 3 之间发生了变化; Python 3 的行为与此处的 NumPy 相同。
  • @Mikael:我认为速度与它无关。

标签: python python-2.7 numpy rounding


【解决方案1】:

numpy 四舍五入到最接近的偶数值:

https://docs.scipy.org/doc/numpy/reference/generated/numpy.around.html#numpy.around

对于恰好介于四舍五入的十进制值之间的值,NumPy 会四舍五入到最接近的偶数值。因此 1.5 和 2.5 舍入为 2.0,-0.5 和 0.5 舍入为 0.0,等等。

【讨论】:

  • 这被专门称为Round half to even 并且很有用,因为它不会引入偏见。这在金融领域尤其重要,有时被称为“银行家四舍五入”
  • 奇怪的是,我已经向许多不同公司的银行家教过 Python 和 NumPy,但很少有人认识到这种舍入模式......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-08
  • 2015-07-20
  • 2010-10-03
  • 2021-07-12
  • 2013-10-04
  • 2019-01-23
相关资源
最近更新 更多