【发布时间】:2017-05-14 13:56:11
【问题描述】:
我正在尝试通过主持人介绍自己参加 MCMC 采样。我想使用 github 上的一组示例代码,https://github.com/dfm/emcee/blob/master/examples/quickstart.py 从 Maxwell Boltzmann 分布中简单地抽取一个样本。
示例代码非常出色,但是当我将分布从高斯分布更改为麦克斯韦分布时,我收到错误,TypeError: lnprob() 只需要 2 个参数(给定 3 个)
但是,在没有给出适当参数的任何地方都不会调用它?需要一些关于如何定义麦克斯韦曲线并使其适合此示例代码的指导。
这就是我所拥有的;
from __future__ import print_function
import numpy as np
import emcee
try:
xrange
except NameError:
xrange = range
def lnprob(x, a, icov):
pi = np.pi
return np.sqrt(2/pi)*x**2*np.exp(-x**2/(2.*a**2))/a**3
ndim = 2
means = np.random.rand(ndim)
cov = 0.5-np.random.rand(ndim**2).reshape((ndim, ndim))
cov = np.triu(cov)
cov += cov.T - np.diag(cov.diagonal())
cov = np.dot(cov,cov)
icov = np.linalg.inv(cov)
nwalkers = 50
p0 = [np.random.rand(ndim) for i in xrange(nwalkers)]
sampler = emcee.EnsembleSampler(nwalkers, ndim, lnprob, args=[means, icov])
pos, prob, state = sampler.run_mcmc(p0, 5000)
sampler.reset()
sampler.run_mcmc(pos, 100000, rstate0=state)
谢谢
【问题讨论】:
-
在 SO 上,我们更愿意查看 您的 代码,以便我们确切知道我们面临的问题。
-
当然,对不起!我现在已经添加了。
-
不用担心。如果我每次写那篇文章都能得到一分钱……
-
当我运行这段代码时,我得到了完全不同的(邪恶的)结果:一系列溢出警告,然后是与 NaN 相关的值错误。我在 Windows10 上运行 Py3.4。
-
嗨,比尔,我在 Windows 10 上运行 Py2.7。我现在似乎也遇到了同样的错误。我对函数如何返回 Nan 感到迷茫?当我使用 scipy 定义分布时,也会出现相同的响应
标签: python probability mcmc emcee