在NumPy的0警告忽略鸿沟

问题描述 投票:26回答:2

我有一个统计问题的函数:

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功能校正在其他文件中的函数的结果,所以我不需要这样的警告。

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

我不想禁用所有蟒蛇警告,仅这一项。

python numpy suppress-warnings divide-by-zero
2个回答
66
投票

您可以禁用与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

请参见“兼容性”在release notes最后一段的“新功能”部分之前部分:

比较NaN的浮点数字现在引发无效运行时警告。如果为NaN预计警告可以使用np.errstate被忽略。


3
投票

您也可以使用numpy.divide为师。这样,你没有明确的禁止警告。

In [725]: np.divide(2, 0)
Out[725]: 0
© www.soinside.com 2019 - 2024. All rights reserved.