Игнорировать деление на 0 предупреждение в python
у меня есть функция для статистики вопросы:
import numpy as np
from scipy.special import gamma as Gamma
def Foo(xdata):
...
return x1 * (
( #R is a numpy vector
( ((R - x2)/beta) ** (x3 -1) ) *
( np.exp( - ((R - x2) / x4) ) ) /
( x4 * Gamma(x3))
).real
)
иногда я получаю от оболочки следующее предупреждение:
RuntimeWarning: divide by zero encountered in...
Я использую numpy isinf
функция для исправления результатов функции в других файлах, где мне нужно сделать. поэтому мне не нужно предупреждать.
есть способ игнорировать сообщение? Другими словами, Я не хочу, чтобы оболочка печатала это сообщение.
Я не хочу отключать все предупреждения python, только это один.
2 ответов
вы можете отключить предупреждение с numpy.seterr
. Поставьте это перед возможным делением на ноль:
np.seterr(divide='ignore')
это отключит предупреждения с нулевым разделением по всему миру. Если вы просто хотите отключить их немного, вы можете использовать numpy.errstate
на with
статья:
with np.errstate(divide='ignore'):
# some code here
для деления нуля на ноль (неопределенное, приводит к NaN) поведение ошибки изменилось с numpy версии 1.12.0: теперь это считается " недопустимым", хотя раньше это было "разделение".
таким образом, если есть шанс, что ваш числитель может быть равен нулю, используйте
np.seterr(divide='ignore', invalid='ignore')
или
with np.errstate(divide='ignore', invalid='ignore'):
# some code here
см. раздел "Совместимость" в заметки, последний абзац перед разделом "новые возможности":
сравнение чисел с плавающей запятой NaN теперь вызывает недопустимое предупреждение времени выполнения. Если ожидается NaN, предупреждение можно игнорировать с помощью np.errstate.
вы также можете использовать numpy.divide
для разделения. Таким образом, вам не нужно явно отключать предупреждения.
In [725]: np.divide(2, 0)
Out[725]: 0