2014-07-23 5 views
-1

Dan Foreman-Mackley의 "emcee"Python 모듈에 익숙한 사람은 누구인지 모르지만 배포본을 샘플로 사용하고 있습니다. 필자의 배포본이 펑키하게 보이기 때문에 Parallel Tempering sampler를 사용하고 있습니다. 다음은 관련 코드입니다.TypeError : 'numpy.ndarray'객체를 호출 할 수 없습니다.

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 

업데이트 : 다음은 전체 오류입니다

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))) 
+0

'lnlike'와'lnprior'는 무엇입니까? –

+0

@PadraicCunningham 해당 정의로 게시물을 업데이트했습니다. – naomig

+0

'lnlike'는 배열을 반환합니까? –

답변

-2

메시지 "형식 오류 : 'numpy.ndarray'객체가 호출되지 않습니다는"여기 lnlike 및 lnprior 함수입니다 의미 "NumPy와 그 .ndarray "는 모듈 또는 변수이므로 함수로 호출하려고하므로 호출 할 수 없습니다. '()'를 사용하여 함수를 호출하면이 유형 오류가 발생합니다. 해당 참조 다음에 '()'을 삭제하면 모든 것이 정상이됩니다.

관련 문제