12

エラーが発生しています:

Warning: invalid value encountered in log

Pythonから、numpy(バージョン1.5.0を使用)によってエラーがスローされると思います。しかし、いくつかの場所で「ログ」関数を呼び出しているため、エラーがどこから発生しているのかわかりません。このエラーを生成した行番号を出力するために numpy を取得する方法はありますか?

警告は、0 以下 (負) に丸めるのに十分小さい数のログを取ることによって引き起こされると思います。そうですか?これらの警告の通常の原因は何ですか?

4

2 に答える 2

22

np.seterr(invalid='raise')(誤った呼び出しの前に) コードを挿入すると、 numpylogは警告を発行する代わりに例外を発生させます。これにより、トレースバック エラー メッセージが表示され、エラーが発生したときに Python が実行していた行がわかります。

于 2010-11-16T03:20:24.383 に答える
0

numpy のソースにアクセスできる場合は、(grep などを使用して) その警告を出力する行を見つけ、対応するファイルを編集して、無効な値が渡されたときに (たとえば、アサーションを使用して) エラーを強制することができるはずです。 . これにより、不適切な値でログを呼び出したコード内の場所を指すスタック トレースが得られます。

numpy ソースを簡単に調べましたが、説明した警告に一致するものは見つかりませんでした (私のバージョンの numpy はあなたのものよりも古いですが)。

>>> import numpy
>>> numpy.log(0)
-inf
>>> numpy.__version__
'1.3.0'

numpy にない他のログ関数を呼び出している可能性はありますか? たとえば、無効な入力が与えられたときに実際に例外をスローするものを次に示します。

>>> import math
>>> math.log(0)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: math domain error
于 2010-11-16T03:11:44.307 に答える