我想向自我介紹MCMC與司儀採樣。我想簡單地使用github上的一組示例代碼,從Maxwell Boltzmann分佈中抽取一個樣本,https://github.com/dfm/emcee/blob/master/examples/quickstart.py。MCMC使用Python的emcee對麥克斯韋曲線進行採樣
的示例代碼是真的優良,但是當我從高斯改變分配到一個麥克斯韋,收到錯誤,類型錯誤: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)
感謝
上,所以我們更願意看到*您的*代碼,以便我們確切地知道我們遇上了。 –
當然,對不起!我現在添加了它。 –
不用擔心。如果我每寫一篇文章就有一分錢...... –