dask.array.round
dask.array.round¶
- dask.array.round(a, decimals=0)[源代码]¶
均匀地四舍五入到给定的位数。
此文档字符串是从 numpy.round 复制的。
Dask 版本可能存在一些不一致性。
- 参数
- aarray_like
输入数据。
- 小数int, 可选
要四舍五入的小数位数(默认值:0)。如果小数位数为负数,则指定小数点左侧的位置数。
- 出ndarray, 可选 (Dask 不支持)
替代输出数组,用于放置结果。它必须与预期输出的形状相同,但如果需要,输出值的类型将被强制转换。更多详情请参见 Output type determination。
- 返回
- 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])