Нахождение вычисления, которое генерирует NaN - PullRequest
8 голосов
/ 02 июня 2011

У меня есть довольно большой кусок (несколько тысяч строк) кода Python / Numpy / Scipy, который выдает NaN с определенными входными данными.Я искал и нашел некоторых из обычных подозреваемых (log(0) и т. П.), Но ни один из очевидных из них не является виновником в этом случае.

Существует ли относительно безболезненный способ (т. Е. Помимо размещения кода обработки исключений вокруг каждого потенциального преступника), чтобы выяснить, откуда поступают эти NaN?

Ответы [ 2 ]

9 голосов
/ 02 июня 2011

Я бы начал с numpy.seterr.

Там недопустимая операция определяется как «результат не является выражаемым числом, как правило, указывает, что был получен NaN».По умолчанию для этого параметра установлено значение «игнорировать».

3 голосов
/ 02 июня 2011

Вы можете использовать numpy.seterr, чтобы установить глобальное поведение обработки ошибок с плавающей запятой для всех подпрограмм. Это должно позволить вам точно определить, где в коде они возникают (или, по крайней мере, где numpy видит их в первый раз).

...