在Python中减去numpy数组时不需要的舍入

mik*_*ike 4 python arrays numpy rounding subtraction

我遇到了一个问题,当从一个浮点数中减去一个数组时,python会自动舍入非常小的数字(小于1e-8).举个例子:

 import numpy as np
 float(1) - np.array([1e-10, 1e-5])
Run Code Online (Sandbox Code Playgroud)

关于如何强迫python不要圆的任何想法?这迫使我在某些情况下除以零,并成为一个问题.从numpy数组中减去时会出现同样的问题.

Joe*_*ton 6

大多数情况下,它只是repr那些愚弄你的numpy数组.

考虑上面的例子:

import numpy as np  
x = float(1) - np.array([1e-10, 1e-5]) 
print x
print x[0]
print x[0] == 1.0
Run Code Online (Sandbox Code Playgroud)

这会产生:

[ 1.      0.99999 ]
0.99999999999
False
Run Code Online (Sandbox Code Playgroud)

所以第一个元素实际上并不是零,它只是那些以这种方式显示的numpy数组的漂亮打印.

这可以通过控制numpy.set_printoptions.

当然,numpy使用有限精度的浮子来实现.numpy的重点是成为类似数据数组的内存高效容器,所以decimal在numpy中没有相应的类.

但是,64位浮点数具有相当的精度范围.你不会在1e-10和1e-5上遇到太多问题.如果需要,还有一个numpy.float128dtype,但操作比使用本机浮动要慢得多.