我正在寻找一种以更直观的方式围绕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。
答案 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的明确错误。