更好地舍入Python NumPy.around:舍入NumPy数组

时间:2012-08-15 18:44:26

标签: python arrays numpy rounding

我正在寻找一种以更直观的方式围绕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的更多信息,请参阅its documentation

1 个答案:

答案 0 :(得分: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 **( - (十进制+ 1))/ 2的平均误差,所以你不应该抱怨该错误的1/10000的明确错误。