从一个浮点数中减去一个数组时,我遇到了python自动舍入很小数字(小于1e-8)的问题。以这个例子:在Python中减去numpy数组时发生不必要的四舍五入
import numpy as np
float(1) - np.array([1e-10, 1e-5])
任何想法如何强制蟒蛇不轮?这迫使我在某些情况下除以零,并成为一个问题。从numpy数组中减去时会出现同样的问题。
从一个浮点数中减去一个数组时,我遇到了python自动舍入很小数字(小于1e-8)的问题。以这个例子:在Python中减去numpy数组时发生不必要的四舍五入
import numpy as np
float(1) - np.array([1e-10, 1e-5])
任何想法如何强制蟒蛇不轮?这迫使我在某些情况下除以零,并成为一个问题。从numpy数组中减去时会出现同样的问题。
大多数情况下,它只是无所事事浪费你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的是fundementally利用有限的精度浮点值来控制。 numpy的全部要点是为类似数据的数组提供一个内存高效的容器,所以在numpy中没有相应的类。
然而,64位浮点数有一个不错的精度范围。 1e-10和1e-5不会造成太多问题。如果你需要,还有一个numpy.float128
dtype,但操作将比使用本地浮点数慢得多。
我没有想到这一点,但你是绝对正确的..永远不要相信仅仅是一些东西的表示! +1 – redShadow
我想所有依赖于非常小的浮点数的处理,由Python和底层的C库,在某一点往往会失去精度。
如果你需要的精度,恕我直言,你应该依赖于不同的东西,比如断片的数量等该级别
我不知道是否已经有东西来处理,但如果你能设法以不同的方式表示数字(例如1/10000000000
和1/100000
),然后仅在所有计算结束时计算浮点结果,则应避免所有这些问题。
(当然,你需要一些类,自动地处理断片的计算,以避免重新实现公式等)
我有同样的问题提高1的幂小数,并将它们舍入为0. – mike
奇怪,你得到downvote ...这是一个很好的问题,i.m.o. –