12

我正在寻找一种以更直观的方式对 numpy 数组进行舍入的方法。我有几个浮点数,并希望将它们限制在小数点后几位。这将是这样完成的:

>>>import numpy as np
>>>np.around([1.21,5.77,3.43], decimals=1)
array([1.2, 5.8, 3.4])

现在,当尝试对恰好在舍入步骤之间的数字进行舍入时,就会出现问题。我希望 0.05 舍入为 0.1,但 np.around 设置为舍入到“最近的偶数”。这会产生以下结果:

>>>np.around([0.55, 0.65, 0.05], decimals=1)
array([0.6, 0.6, 0.0])

然后我的问题是,什么是最有效的四舍五入到最接近的数字,而不仅仅是最接近的偶数。

有关 np.around 的更多信息,请参阅其文档

4

1 回答 1

8

这样around做的方式是正确的,但是如果您想做一些不同的事情,例如,您可以减去比舍入精度小得多的数量,例如,

def myround(a, decimals=1):
     return np.around(a-10**(-(decimals+5)), decimals=decimals)

In [22]: myround(np.array([ 1.21,  5.77,  3.43]), 1)
Out[22]: array([ 1.2,  5.8,  3.4])

In [23]: myround(np.array([ 0.55,  0.65,  0.05]), 1)
Out[23]: array([ 0.5,  0.6,  0. ])

我在这里选择的原因5是,不包括偶数/奇数的区别,你隐含地引入了大约 10**(-(decimal+1))/2 的平均错误,所以你不应该抱怨一个明确的错误该误差的 1/10000。

于 2012-08-16T01:03:48.917 回答