忽略 NumPy 中除以 0 的警告
Ignore divide by 0 warning in NumPy
我有一个统计问题的函数:
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
)
有时我会从 shell 收到以下警告:
RuntimeWarning: divide by zero encountered in...
我使用了numpy isinf
函数来修正其他文件中函数的结果,所以我不需要这个警告。
有没有办法忽略这条消息?
换句话说,我不希望 shell 打印此消息。
我不想禁用所有 python 警告,仅此一个。
您可以使用 numpy.seterr
禁用警告。把它放在可能被零除之前:
np.seterr(divide='ignore')
这将在全局范围内禁用零除法警告。如果您只想稍微禁用它们,可以在 with
子句中使用 numpy.errstate
:
with np.errstate(divide='ignore'):
# some code here
对于零除零(未确定,结果为 NaN),错误行为已随 numpy 版本 1.12.0 发生变化:现在被视为 "invalid",而之前是 "divide".
因此,如果您的分子也可能为零,请使用
np.seterr(divide='ignore', invalid='ignore')
或
with np.errstate(divide='ignore', invalid='ignore'):
# some code here
参见 release notes 中的 "Compatibility" 部分,"New Features" 部分之前的最后一段:
Comparing NaN floating point numbers now raises the invalid runtime warning. If a NaN is expected the warning can be ignored using np.errstate.
您也可以使用 numpy.divide
进行除法。这样您就不必明确禁用警告。
In [725]: np.divide(2, 0)
Out[725]: 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
)
有时我会从 shell 收到以下警告:
RuntimeWarning: divide by zero encountered in...
我使用了numpy isinf
函数来修正其他文件中函数的结果,所以我不需要这个警告。
有没有办法忽略这条消息? 换句话说,我不希望 shell 打印此消息。
我不想禁用所有 python 警告,仅此一个。
您可以使用 numpy.seterr
禁用警告。把它放在可能被零除之前:
np.seterr(divide='ignore')
这将在全局范围内禁用零除法警告。如果您只想稍微禁用它们,可以在 with
子句中使用 numpy.errstate
:
with np.errstate(divide='ignore'):
# some code here
对于零除零(未确定,结果为 NaN),错误行为已随 numpy 版本 1.12.0 发生变化:现在被视为 "invalid",而之前是 "divide".
因此,如果您的分子也可能为零,请使用
np.seterr(divide='ignore', invalid='ignore')
或
with np.errstate(divide='ignore', invalid='ignore'):
# some code here
参见 release notes 中的 "Compatibility" 部分,"New Features" 部分之前的最后一段:
Comparing NaN floating point numbers now raises the invalid runtime warning. If a NaN is expected the warning can be ignored using np.errstate.
您也可以使用 numpy.divide
进行除法。这样您就不必明确禁用警告。
In [725]: np.divide(2, 0)
Out[725]: 0