2017-04-19 49 views
0

具體來說,pandasnumpy中的這些累積產品函數是否以強大的方式實現,以便在將很多小數相乘時處理下溢?例如,他們是否使用log-sum-exp技巧?Python:是否pandas.DataFrame.comprod()和numpy.comprod()處理數字下溢?

謝謝。

+1

你可以很容易地檢查。例如,設置'x = np.array([1e-5,1e-30,1e-100,1e-200,1e50,1e150]),並將'np.cumprod(x)'與'np.exp (np.cumsum(np.log(X)))'。 –

+0

是的,我做了類似的事情,但不確定理論範圍在哪裏,或者它剛剛達到我的平臺(機器/操作系統/等)的極限。 – WillZ

回答

1

不幸的是,沒有。 @ warren-weckesser的評論顯示這不起作用。

np.array([1e-5, 1e-30, 1e-100, 1e-200, 1e50, 1e150]).cumprod() 

# returns 
array([1.0e-005, 1.0e-035, 1.0e-135, 0.0e+000, 0.0e+000, 0.0e+000]) 

原因是numpy浮動支持最小正值2 ** -1022或約2.225e-308。一旦你的計算變得更小,它就會降到零,這就是我們在上面輸出中看到的結果。大熊貓也是如此。