numpy.round#

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

将数值均匀地舍入到指定的小数位数。

参数:
a类数组对象

输入数据。

decimalsint, optional

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

outndarray,可选

用于放置结果的替代输出数组。它必须与预期输出具有相同的形状,但输出值的类型将在必要时进行转换。有关更多详细信息,请参阅 输出类型确定

返回:
rounded_arrayndarray

一个与 a 类型相同的数组,包含舍入后的值。除非指定了 out,否则将创建一个新数组。将返回对结果的引用。

复数的实部和虚部分别进行舍入。浮点数舍入的结果是浮点数。

另请参阅

ndarray.round

等效方法

around

此函数的别名

ceil, fix, floor, rint, trunc

备注

对于正好位于两个舍入十进制值中间的值,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])