忽略 NumPy 中的除以0警告

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

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 警告,只是这一个。

54484 次浏览

你可以用 numpy.seterr禁用这个警告。把它放在可能除以零之前:

np.seterr(divide='ignore')

这样全球范围内的零除警报就失效了。如果您只想禁用它们一会儿,可以在 with子句中使用 numpy.errstate:

with np.errstate(divide='ignore'):
# some code here

对于零除以零(未确定,结果为 NaN) ,错误行为随着数字版本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