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

Python中减去numpy数组时不需要的舍入,python,arrays,numpy,rounding,subtraction,Python,Arrays,Numpy,Rounding,Subtraction,我遇到了一个问题,python在从一个浮点数减去一个数组时会自动舍入非常小的数字(小于1e-8)。举个例子: import numpy as np float(1) - np.array([1e-10, 1e-5]) 有没有关于如何强制python不旋转的想法?这迫使我在某些情况下被零除,并成为一个问题。当从numpy数组中进行减法运算时也会出现同样的问题。我想这一切都取决于Python和底层C库对非常小的浮点数的处理,在某一点上,精度往往会降低 如果你需要那样的精度,我想你应该依靠一些不

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

 import numpy as np
 float(1) - np.array([1e-10, 1e-5])

有没有关于如何强制python不旋转的想法?这迫使我在某些情况下被零除,并成为一个问题。当从numpy数组中进行减法运算时也会出现同样的问题。

我想这一切都取决于Python和底层C库对非常小的浮点数的处理,在某一点上,精度往往会降低

如果你需要那样的精度,我想你应该依靠一些不同的东西,比如分数等

我不知道是否已经有了处理这个问题的方法,但是如果你能设法用不同的方式来表示这个数字(比如
1/1000000000
1/100000
),然后只在所有计算结束时计算浮点结果,你应该避免所有这些问题


(当然,您需要一些自动处理分馏计算的类,以避免重新实现公式等。)

大多数情况下,只是numpy数组的
repr
在愚弄您

以上面的例子为例:

import numpy as np  
x = float(1) - np.array([1e-10, 1e-5]) 
print x
print x[0]
print x[0] == 1.0
这将产生:

[ 1.      0.99999 ]
0.99999999999
False
所以第一个元素实际上不是零,只是numpy数组的漂亮打印以这种方式显示出来

这可以通过以下方式控制:

当然,numpy基本上是使用有限精度的浮动。numpy的全部目的是成为类似数据数组的内存高效容器,因此numpy中没有与
decimal
类等效的类


但是,64位浮点具有相当高的精度范围。使用1e-10和1e-5不会遇到太多问题。如果您需要,还有一个
numpy.float128
dtype,但是操作将比使用本机float慢得多。

我也遇到了同样的问题,将小数值提高到1的幂,并将它们四舍五入到0。奇怪的是,您得到了一个向下的投票。。。这是个好问题,i.m.o.我没想到,但你完全正确。。永远不要只相信某件事的表象+1.