数组除以常量后,如何更改 numpy 数组中浮点数的自动舍入?
How to change the auto rounding of floats in a numpy array after the array has been divided by a constant?
使用 Python 2.7 和 numpy 1.16.5
我想将数组元素从英寸转换为英尺
FootToInch = 12.0
a = [.5, 1, 1.5, 2]
a = np.array(a)
new_a = a/FootToInch
我得到:
[0.04166667 0.08333333 0.125 0.16666667]
我不希望第一个元素四舍五入到那个值。我希望它四舍五入到相同的值
简单地划分,即 .5/12 = 0.041666666666666664
有没有办法更改数组中的舍入以获得与 .5/12
相同的值?
numpy 中有一个配置可以设置值打印到屏幕时的精度级别。
要设置该精度,您可以使用 .set_printoptions()
方法。
为了显示打印选项对视觉输出的影响,我 运行 通过 运行ge 打印设置从 6 位精度到不包括 20 位数字,步长为2 并计算出值
FootToInch = 12.0
a = [.5, 1, 1.5, 2]
a = np.array(a)
for prec in range(6, 20, 2):
np.set_printoptions(prec)
print(prec, ':', a/FootToInch)
这会导致以下输出:
6 : [0.041667 0.083333 0.125 0.166667]
8 : [0.04166667 0.08333333 0.125 0.16666667]
10 : [0.0416666667 0.0833333333 0.125 0.1666666667]
12 : [0.041666666667 0.083333333333 0.125 0.166666666667]
14 : [0.04166666666667 0.08333333333333 0.125 0.16666666666667]
16 : [0.0416666666666667 0.0833333333333333 0.125 0.1666666666666667]
18 : [0.041666666666666664 0.08333333333333333 0.125 0.16666666666666666]
这确实是一个显示舍入问题,尽管对浮点精度有潜在的依赖性:
In [189]: .5/12
Out[189]: 0.041666666666666664
In [190]: np.float64(.5)/np.float64(12)
Out[190]: 0.041666666666666664
In [191]: np.float32(.5)/np.float32(12)
Out[191]: 0.041666668
In [192]: np.float128(.5)/np.float128(12)
Out[192]: 0.041666666666666666668
使用多精度数学:
In [8]: mpmath.fraction(5,120)
Out[8]: <5/120: 0.0416667~>
舍入到 7
数学上正确的方法而不考虑精度。
默认打印选项力求在细节与可读性之间取得平衡,尤其是对于较大的数组:
In [194]: np.array([.5,1,1.5,2])/12
Out[194]: array([0.04166667, 0.08333333, 0.125 , 0.16666667])
In [195]: (np.array([.5,1,1.5,2])/12).tolist()
Out[195]: [0.041666666666666664, 0.08333333333333333, 0.125, 0.16666666666666666]
使用 Python 2.7 和 numpy 1.16.5
我想将数组元素从英寸转换为英尺
FootToInch = 12.0
a = [.5, 1, 1.5, 2]
a = np.array(a)
new_a = a/FootToInch
我得到:
[0.04166667 0.08333333 0.125 0.16666667]
我不希望第一个元素四舍五入到那个值。我希望它四舍五入到相同的值
简单地划分,即 .5/12 = 0.041666666666666664
有没有办法更改数组中的舍入以获得与 .5/12
相同的值?
numpy 中有一个配置可以设置值打印到屏幕时的精度级别。
要设置该精度,您可以使用 .set_printoptions()
方法。
为了显示打印选项对视觉输出的影响,我 运行 通过 运行ge 打印设置从 6 位精度到不包括 20 位数字,步长为2 并计算出值
FootToInch = 12.0
a = [.5, 1, 1.5, 2]
a = np.array(a)
for prec in range(6, 20, 2):
np.set_printoptions(prec)
print(prec, ':', a/FootToInch)
这会导致以下输出:
6 : [0.041667 0.083333 0.125 0.166667]
8 : [0.04166667 0.08333333 0.125 0.16666667]
10 : [0.0416666667 0.0833333333 0.125 0.1666666667]
12 : [0.041666666667 0.083333333333 0.125 0.166666666667]
14 : [0.04166666666667 0.08333333333333 0.125 0.16666666666667]
16 : [0.0416666666666667 0.0833333333333333 0.125 0.1666666666666667]
18 : [0.041666666666666664 0.08333333333333333 0.125 0.16666666666666666]
这确实是一个显示舍入问题,尽管对浮点精度有潜在的依赖性:
In [189]: .5/12
Out[189]: 0.041666666666666664
In [190]: np.float64(.5)/np.float64(12)
Out[190]: 0.041666666666666664
In [191]: np.float32(.5)/np.float32(12)
Out[191]: 0.041666668
In [192]: np.float128(.5)/np.float128(12)
Out[192]: 0.041666666666666666668
使用多精度数学:
In [8]: mpmath.fraction(5,120)
Out[8]: <5/120: 0.0416667~>
舍入到 7
数学上正确的方法而不考虑精度。
默认打印选项力求在细节与可读性之间取得平衡,尤其是对于较大的数组:
In [194]: np.array([.5,1,1.5,2])/12
Out[194]: array([0.04166667, 0.08333333, 0.125 , 0.16666667])
In [195]: (np.array([.5,1,1.5,2])/12).tolist()
Out[195]: [0.041666666666666664, 0.08333333333333333, 0.125, 0.16666666666666666]