如何解决scipy 中的广播错误,但数组的形状相同
prior = scipy.stats.truncnorm.pdf(x,a,b,loc=loc,scale=scale)
我收到以下错误,
<ipython-input-32-9c0390b95343> in prior(values1,values2)
69 # line 6352 return _norm_pdf(x) / self._delta
70 prior = scipy.stats.truncnorm.pdf(x,---> 71 loc=loc,scale=scale)
72
/opt/anaconda3/envs/pymc3/lib/python3.6/site-packages/scipy/stats/_distn_infrastructure.py in pdf(self,x,*args,**kwds)
1669 goodargs = argsreduce(cond,*((x,)+args+(scale,)))
1670 scale,goodargs = goodargs[-1],goodargs[:-1]
-> 1671 place(output,cond,self._pdf(*goodargs) / scale)
1672 if output.ndim == 0:
1673 return output[()]
/opt/anaconda3/envs/pymc3/lib/python3.6/site-packages/scipy/stats/_continuous_distns.py in _pdf(self,b)
6350
6351 def _pdf(self,b):
-> 6352 return _norm_pdf(x) / self._delta
6353
6354 def _logpdf(self,b):
ValueError: operands Could not be broadcast together with shapes (4084,) (4100,)
但是数组都是相同的形状。当我在调用 truncnorm.pdf 之前放入打印语句时,
print(x.shape,a.shape,b.shape,loc.shape,scale.shape)
prior = scipy.stats.truncnorm.pdf(x,scale=scale)
我明白了,
(4100,)
确认。
我按照在 _continuous_distns.py 文件中计算截断法线的 pdf 的过程尝试为自己重新创建它,看看是否发生了某些事情来在内部屏蔽其中一个数组,
import scipy.special as sc
def norm_cdf(x):
return sc.ndtr(x)
def norm_sf(x):
return norm_cdf(-x)
nb = norm_cdf(b)
na = norm_cdf(a)
sb = norm_sf(b)
sa = norm_sf(a)
# line 6345 - 6347,defining self._delta
print(np.where(a > 0,-(sb - sa),nb - na).shape)
# line 162 return np.exp(-x**2/2.0) / _norm_pdf_C
# defining _norm_pdf(x)
norm_pdf_C = np.sqrt(2*np.pi)
print((np.exp(-x**2/2.0) / norm_pdf_C).shape)
我明白
(4100,)
(4100,)
正确且形状相同。所以我不知道问题是什么。如果您有任何建议,我将不胜感激。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。