2017-02-08 44 views
0

當我申請numpy.exp爲數字數組我得到以下運行時警告:檢索數組元素導致運行時警告

RuntimeWarning: overflow encountered in exp 

現在我知道,這個數組中的某個值造成的exp結果溢出但我不知道哪一個(這個數組有數百萬個條目)。

有沒有辦法讓這個運行時警告更加冗長,從某種意義上說,它還顯示導致溢出的特定參數(更重要的是它在輸入數組中的位置)?我發現seterrseterrcall但是他們似乎並沒有納入什麼導致錯誤(只有錯誤是關於什麼)。


我知道 - 遇到此警告後 - 我可以在陣列中分別通過每個價值exp並觀看了警告或者,我可以用isfinite測試的exp(array)的元素。然而,這意味着與實際代碼相混淆,而我更喜歡numpy在幕後執行此類事情(正確配置)。


編輯:我被要求張貼一些代碼,再現錯誤。那就是:

>>> import numpy 
>>> array = numpy.zeros((10,), dtype=float) 
>>> array[0] = 1.0e308 
>>> numpy.exp(array) 
__main__:1: RuntimeWarning: overflow encountered in exp 
array([ inf, 1., 1., 1., 1., 1., 1., 1., 1., 1.]) 

我想知道,這是與指數0導致溢出(不只是溢出發生的地方)的元素。

+1

所有的值,可以發佈一些代碼嗎?你到現在爲止做了什麼? – Jarvis

+0

我添加了一個可以重現場景的片段。 –

+0

嘗試將'dtype = float'更改爲'dtype = float128'。 @a_guest – Jarvis

回答

0

問題在於exp(1e308)對於float來說太大了!

如果考慮EXP功能,知道1.7976931348623157e+308是一個浮動的最大值,從數組中刪除以下log(1.7976931348623157e+308) = 709

+0

請再次閱讀我的問題。我想知道導致運行時警告的數組中元素的索引,而不是繞過警告。我想通過配置numpy而不是像[isfinite](https://docs.scipy.org/doc/numpy/reference/generated/numpy.isfinite.html)(或'> log(1.7976931348623157e + 308)')我自己手動。 –

相關問題