【问题标题】:ValueError: operands could not be broadcast together with shapes (1,2) (20,100)ValueError:操作数无法与形状 (1,2) (20,100) 一起广播
【发布时间】:2014-08-16 10:29:22
【问题描述】:

我正在使用 emcee mcmc 锤子从 20 个具有随机标准偏差的样本中重建一维高斯。这是我的代码的相关部分:

def loglike(alpha,datapoints):
mu, sig = alpha
return nbabies*(np.log(1/(nsamples*np.sqrt(2*np.pi)*sig)))+np.sum(scipy.misc.logsumexp(-(datapoints-mu)**2/(2*sig**2),axis=1),axis=0)

import scipy.optimize as op
nll = lambda *args: -loglike(*args)
result = op.minimize(nll, [mupop, sigpop], args=(datapoints))
muml,sigml = result["x"]

def logprior(alpha):
   mu, sig = alpha
    if 0 < sig < 1 and 0.0 < mu < 1:
      return 0.0
return -np.inf

def logprob(alpha,datapoints):
   lp = logprior(alpha)
    if not np.isfinite(lp):
      return -np.inf
return lp + loglike(alpha,datapoints)

rendim = 2
renwalkers = 100
rensamples = 10000

p0 = [result["x"]+np.random.rand(rendim) for i in range(renwalkers)]

#now we run emcee!
momma2 = emcee.EnsembleSampler(renwalkers, rendim, logprob, args=(datapoints))
momma2.run_mcmc(p0, rensamples)
momma2samps = momma2.flatchain[0.2*renwalkers*rensamples:,]

但我不断收到错误消息“ValueError:操作数无法与形状 (1,2) (20,100) 一起广播。”有什么关系?

【问题讨论】:

  • 您的示例不可重现。 mupop 是什么?并小心缩进!

标签: python numpy statistics gaussian emcee


【解决方案1】:

你的问题是那行

result = op.minimize(nll, [mupop, sigpop], args=(datapoints))

应该是

result = op.minimize(nll, [mupop, sigpop], args=(datapoints,))

minimize 将元组作为参数,如果不包含逗号,则无法正确解释参数。

【讨论】:

    猜你喜欢
    • 2019-12-20
    • 2017-09-09
    • 2012-10-31
    • 2013-04-07
    • 2012-08-05
    • 2018-08-18
    • 2020-06-20
    • 2014-08-24
    • 2018-12-26
    相关资源
    最近更新 更多