我正在尝试使用MCMC将曲线拟合到一些数据。

由于我的特定问题的性质,有时(运行代码的1/5次)遇到一些奇点,并且代码引发了RuntimeWarning并继续给出错误的答案。

/Library/Python/2.7/site-packages/emcee-2.2.1-py2.7.egg/emcee/ensemble.py:335: RuntimeWarning: invalid value encountered in subtract
/Library/Python/2.7/site-packages/emcee-2.2.1-py2.7.egg/emcee/ensemble.py:336: RuntimeWarning: invalid value encountered in greater

基本上发生这种情况是因为我正在记录高斯对数,并且均值的建议值之一等于数据点之一。

我想重试运行代码,也许使用try和except,直到这些运行时警告没有发生。
谢谢!

编辑:
@sgDysregulation发表评论后,我尝试过:
while True:
    try:
        print "Before mcmc"
        sampler.run_mcmc(pos, 500)
        print "After mcmc"
        break
    except Exception as e:
        print "Warning detected"
        continue

在我尝试同时使用“pass”和“continue”语句的地方,将“break”放在while循环和“try”里面。还尝试了“RuntimeWarning”而不是“Exception”。

上方代码段的输出未显示已检测到任何警告。
Before mcmc
/Library/Python/2.7/site-packages/emcee-2.2.1-py2.7.egg/emcee/ensemble.py:335: RuntimeWarning: invalid value encountered in subtract
/Library/Python/2.7/site-packages/emcee-2.2.1-py2.7.egg/emcee/ensemble.py:336: RuntimeWarning: invalid value encountered in greater
After mcmc

最佳答案

您可以使用 np.errstate 上下文管理器来捕获警告,就好像它是一个异常(exception)一样:

while True:
    try:
        print("Before mcmc")
        with np.errstate(all='raise'):
            sampler.run_mcmc(pos, 500)
        print("After mcmc")
        break
    except Exception:
        print("Warning detected")
        continue

关于python - 重试直到没有RuntimeWarning,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41682071/

10-12 18:34