在NumPy中忽略除以0的警告

发布于 2021-01-29 17:52:30

我有一个统计问题的功能:

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...

我使用numpyisinf函数更正其他文件中的函数结果,因此不需要此警告。

有没有办法忽略该消息?换句话说,我不希望外壳程序打印此消息。

我不想禁用所有python警告,仅禁用这一警告。

关注者
0
被浏览
180
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    您可以使用禁用警告numpy.seterr。将其放在可能的除以零之前:

    np.seterr(divide='ignore')
    

    这将全局禁用零除警告。如果只想禁用它们一点,可以numpy.errstatewith子句中使用:

    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忽略该警告。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看