numpy.around

numpy.around(a, decimals=0, out=None)[源代码]

平均四舍五入到给定的小数位数。

参数
aarray_like

输入数据。

decimals可选的

要舍入到的小数位数(默认值:0)。如果小数为负数,则指定小数点左边的位置数。

outndarray,可选

用于放置结果的可选输出数组。它必须具有与预期输出相同的形状,但如果需要,将强制转换输出值的类型。见 输出类型确定 了解更多详细信息。

返回
rounded_array恩达雷

与相同类型的数组 a ,包含四舍五入的值。除非 out 已指定,将创建新数组。返回对结果的引用。

复数的实部和虚部分别四舍五入。将浮点数舍入的结果是浮点数。

参见

ndarray.round

等效法

ceil, fix, floor, rint, trunc

笔记

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

np.around 使用快速但有时不精确的算法来舍入浮点数据类型。积极的 decimals 它相当于 np.true_divide(np.rint(a * 10**decimals), 10**decimals) ,由于IEEE浮点标准中小数点的表示不精确而产生误差 [1] 以及以10的幂进行缩放时引入的误差。例如,请注意以下额外的“1”:

>>> np.round(56294995342131.5, 3)
56294995342131.51

如果您的目标是打印具有固定小数位数的值,则最好使用numpy的浮点打印例程来限制打印的小数位数:

>>> np.format_float_positional(56294995342131.5, precision=3)
'56294995342131.5'

浮点打印例程使用一种精确但计算要求更高的算法来计算小数点后的位数。

或者,Python的内置 round 函数对64位浮点值使用更精确但速度较慢的算法:

>>> round(56294995342131.5, 3)
56294995342131.5
>>> np.round(16.055, 2), round(16.055, 2)  # equals 16.0549999999999997
(16.06, 16.05)

工具书类

1

“IEEE 754现状讲座笔记”,William Kahan,https://people.eecs.berkeley.edu/~wkahan/ieee754 status/ieee754.pdf

2

“在浮点计算中,对迂回道的盲目评估有多徒劳?”,威廉·卡汉,https://people.eecs.berkeley.edu/~wkahan/mindless.pdf

实例

>>> np.around([0.37, 1.64])
array([0.,  2.])
>>> np.around([0.37, 1.64], decimals=1)
array([0.4,  1.6])
>>> np.around([.5, 1.5, 2.5, 3.5, 4.5]) # rounds to nearest even value
array([0.,  2.,  2.,  4.,  4.])
>>> np.around([1,2,3,11], decimals=1) # ndarray of ints is returned
array([ 1,  2,  3, 11])
>>> np.around([1,2,3,11], decimals=-1)
array([ 0,  0,  0, 10])