我正在尝试使用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/