Игнорировать деление на 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