类型错误:'numpy.ndarray'对象不可调用
我不知道有没有人熟悉Dan Foreman-Mackley的“emcee”这个Python模块,但我正在用它来对一个分布进行采样。我使用的是并行温度采样器,因为我的分布看起来有点奇怪。这里是相关的代码:
from emcee import PTSampler
rendim = 6
renwalkers = 100
ntemps = 20
gauss2 = PTSampler(ntemps, renwalkers, rendim, lnlike, lnprior)
p0 = [[[np.random.rand()*0.24,np.random.rand()*3,np.random.rand()*1,np.random.rand()*1,np.random.rand()*3,np.random.rand()*1] for i in range(renwalkers)] for i in range(ntemps)]
for q, lnprob, lnlike in gauss2.sample(p0,iterations=1000):
pass
gauss2.reset()
for q, lnprob, lnlike in gauss2.sample(p, lnprob0=lnprob,
lnlike0=lnlike,
iterations=10000, thin=10):
pass
我一直收到一个错误,提示'numpy.ndarray'对象不可调用。这里是完整的错误信息:
TypeError Traceback (most recent call last)
<ipython-input-25-d5f2a1f4b7b0> in <module>()
11 p0 = [[[np.random.rand()*0.24,np.random.rand()*3,np.random.rand()*1,np.random.rand()*1,np.random.rand()*3,np.random.rand()*1] for i in range(renwalkers)] for i in range(ntemps)]
12
---> 13 for q, lnprob, lnlike in gauss2.sample(p0,iterations=1000):
14 pass
15 gauss2.reset()
/Library/Python/2.7/site-packages/emcee-2.1.0-py2.7.egg/emcee/ptsampler.py in sample(self, p0, lnprob0, lnlike0, iterations, thin, storechain)
255 self.logpargs, self.loglkwargs, self.logpkwargs)
256 if self.pool is None:
--> 257 results = list(map(fn, p.reshape((-1, self.dim))))
258 else:
259 results = list(self.pool.map(fn, p.reshape((-1, self.dim))))
/Library/Python/2.7/site-packages/emcee-2.1.0-py2.7.egg/emcee/ptsampler.py in __call__(self, x)
94 return lp, lp
95
---> 96 return self.logl(x, *self.loglargs, **self.loglkwargs), lp
97
98
TypeError: 'numpy.ndarray' object is not callable
更新:这里是lnlike和lnprior函数:
def lnprior(theta):
eta, mu1, sig1, h, mu2, sig2 = theta
if 0 < eta < 0.24 and 0 < mu1 < 1.5 and 0 < sig1 < 1 and 0 < h < 1 and 0 < mu2 < 1.5 and 0 < sig2 < 1:
return 0
return -np.inf
def lnlike(theta):
eta, mu1, sig1, h, mu2, sig2 = theta
return -k*np.log(Nsamp)+np.sum(np.log(np.sum(MCetadist(eta,events,mu1,sig1,h,mu2,sig2),axis=1)))
1 个回答
-2
这个错误信息“TypeError: 'numpy.ndarray' object is not callable”意思是你试图把一个“numpy.ndarray”当成函数来用,但它其实是一个模块或变量,所以不能这样调用。当你用'()'去调用一个不是函数的东西时,就会出现这种错误。你只需要把那个引用后面的'()'去掉,就没问题了。