numpy.round#
- numpy.round(a, decimals=0, out=None)[source]#
将值均匀四舍五入到指定的小数位数。
- 参数:
- aarray_like
输入数据。
- decimalsint, 可选
要四舍五入的小数位数(默认值:0)。如果 decimals 为负数,则表示小数点左侧的位数。
- outndarray, 可选
用于放置结果的备用输出数组。它必须与预期输出具有相同的形状,但如果需要,输出值的类型将被转换。有关更多详细信息,请参阅 输出类型确定。
- 返回:
- rounded_arrayndarray
一个与 a 类型相同的数组,包含四舍五入后的值。除非指定了 out,否则将创建一个新数组。返回结果的引用。
复数的实部和虚部分别进行四舍五入。浮点数四舍五入的结果仍是浮点数。
注意
对于恰好在舍入后的十进制值中间的值,NumPy 会四舍五入到最接近的偶数。因此,1.5 和 2.5 舍入到 2.0,-0.5 和 0.5 舍入到 0.0,依此类推。
np.round
使用一种快速但有时不精确的算法来四舍五入浮点数据类型。对于正数 decimals,它等效于np.true_divide(np.rint(a * 10**decimals), 10**decimals)
,由于 IEEE 浮点标准中十进制小数的不精确表示 [1] 以及按十的幂缩放时引入的误差,该算法存在误差。例如,请注意以下示例中多出的“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/ieee754status/IEEE754.PDF
示例
>>> import numpy as np >>> np.round([0.37, 1.64]) array([0., 2.]) >>> np.round([0.37, 1.64], decimals=1) array([0.4, 1.6]) >>> np.round([.5, 1.5, 2.5, 3.5, 4.5]) # rounds to nearest even value array([0., 2., 2., 4., 4.]) >>> np.round([1,2,3,11], decimals=1) # ndarray of ints is returned array([ 1, 2, 3, 11]) >>> np.round([1,2,3,11], decimals=-1) array([ 0, 0, 0, 10])