在Python的NumPy.around中进行更好的舍入:舍入NumPy数组

2024-05-23 19:07:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在寻找一种更直观的方式来绕过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


Tags: importnumpyasnp方式步骤数字数组
1条回答
网友
1楼 · 发布于 2024-05-23 19:07:48

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的显式错误。

相关问题 更多 >