從一個浮點數中減去一個數組時,我遇到了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. –