我在 Windows 桌面上以多线程模式运行 python Emcee MCMC 代码时遇到问题。它在一个线程上运行良好,并在我的 Mac OSX 笔记本电脑上以单线程或多线程模式运行。这是简单的示例代码(取自 Emcee 网站示例)。
import numpy as np
import emcee
def lnprob(x, ivar):
return -0.5 * np.sum(ivar * x ** 2)
ndim, nwalkers = 10, 100
ivar = 1. / np.random.rand(ndim)
p0 = [np.random.rand(ndim) for i in range(nwalkers)]
sampler = emcee.EnsembleSampler(nwalkers, ndim, lnprob, args=[ivar], threads=2)
%time sampler.run_mcmc(p0, 10000)
如果我设置threads=1,它在两台机器上都运行良好,运行大约需要5秒。如果我设置线程= 2,它在 Mac 上运行良好,但在 Windows 机器上挂起。笔记本中没有记录任何错误,但在命令提示符窗口中,我看到错误消息杂乱无章,好像两个进程正在尝试同时写入错误消息。我似乎无法从窗口复制和粘贴它们,但它们最终得到:
"Attribute Error: 'module' object has no attribute 'lnprob'
在两台机器上,我都在 Jupyter 笔记本中运行它。我检查了我是否有更新版本的 emcee、conda 和 anaconda。关于我为什么遇到麻烦的任何想法?