2017-02-08 12 views
0

を引き起こし配列要素を取得し、私は数字の配列にnumpy.expを適用すると、私は以下のランタイムの警告を取得:今、私はこの配列内のいくつかの値がオーバーフローするexpの結果を引き起こしたことを知っているは、実行時の警告

RuntimeWarning: overflow encountered in exp 

を私はどちらが1つ(そしてこのアレイには何百万ものエントリがある)がわからない。

このランタイム警告をより冗長にする方法は、オーバーフロー(さらに重要なのは入力配列内の位置)を引き起こした特定の引数も表示するという意味でですか?私はseterrseterrcallを発見しましたが、にはというエラー(エラーの内容のみ)が含まれているようには見えません。この警告に遭遇した後に - - 私はexpに別々のアレイ内の各値を渡すことができ、警告のためか、私はexp(array)の要素をテストするためにisfiniteを使用することができることに注意


私がいることを知っています。しかし、これは実際のコードを乱すことを意味しますが、私は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には大きすぎるということです!あなたは1.7976931348623157e+308がfloatの最大値であることを知って、EXP関数を考慮した場合

log(1.7976931348623157e+308) = 709

+0

もう一度私の質問をお読みください。ランタイム警告の原因となった配列内の要素のインデックスを知りたい。私は、[isfinite](https://docs.scipy.org/doc/numpy/reference/generated/numpy.isfinite.html)(または '> log(1.7976931348623157e + 308) ')を手動で実行します。 –

関連する問題