NumPy参考 >例行程序 >Mathematical functions > numpy.around
numpy.
around
(a,小数= 0 =,out =无)[源代码] ¶平均舍入到给定的小数位数。
输入数据。
要舍入的小数位数(默认值:0)。如果小数为负数,则指定小数点左侧的位数。
放置结果的替代输出数组。它必须具有与预期输出相同的形状,但是如有必要,将强制转换输出值的类型。有关更多详细信息,请参见ufuncs-output-type。
相同类型的阵列一个,包含舍入值。除非指定了out,否则将创建一个新数组。返回对结果的引用。
复数的实部和虚部分别取整。将浮点数舍入的结果是一个浮点数。
笔记
对于恰好介于四舍五入的十进制值中间的值,NumPy会四舍五入为最接近的偶数值。因此1.5和2.5四舍五入为2.0,-0.5和0.5四舍五入为0.0,依此类推。
np.around
使用快速但有时不精确的算法来舍入浮点数据类型。对于正的十进制小数,它等效于
,由于存在于IEEE浮点标准[1]中的十进制小数的不精确表示,因此存在错误,并且当以10的幂进行缩放时会引入错误。例如,请注意以下额外的“ 1”:np.true_divide(np.rint(a * 10**decimals), 10**decimals)
>>> np.round(56294995342131.5, 3)
56294995342131.51
如果您的目标是使用固定的小数位数打印这些值,则最好使用numpy的float打印例程来限制打印的小数位数:
>>> 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)
参考文献
“关于IEEE 754的状态的注释”,威廉·卡汉(William Kahan),https: //people.eecs.berkeley.edu/~wkahan/ieee754status/IEEE754.PDF
“在浮点计算中对舍入进行无意义的评估有多无效?”,威廉·卡汉(William Kahan),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])