数组除以常量后,如何更改 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]