在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...
我使用numpyisinf
函数更正其他文件中的函数结果,因此不需要此警告。
有没有办法忽略该消息?换句话说,我不希望外壳程序打印此消息。
我不想禁用所有python警告,仅禁用这一警告。
-
您可以使用禁用警告
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忽略该警告。