相关疑难解决方法(0)

省略号广播在numpy.einsum

我有一个问题,理解为什么以下不起作用:

我有一个可以是三维或六维的阵列前因子.我有一个有四个维度的阵列偶极子.前三个维度偶极场比赛的最后三个维度前因子.

由于我不知道前因子的形状,我使用省略号来说明前因子中的三个可选维度:

numpy.einsum('...lmn,lmno->...o', prefactor, dipoles)
Run Code Online (Sandbox Code Playgroud)

(在这里的示例中,prefactor.shape是(1,1,1,160,160,128),dipoles.shape是(160,160,128,3).执行时,我得到错误:

操作数1没有足够的尺寸来匹配广播,并且无法扩展,因为在开头和结尾都指定了爱因斯坦和下标

但是,当我向第二个术语添加省略号时,它确实有效:

numpy.einsum('...lmn,...lmno->...o', prefactor, dipoles)
Run Code Online (Sandbox Code Playgroud)

只是我不明白为什么,因为那里不应该有省略号.有人知道这里发生了什么吗?

http://comments.gmane.org/gmane.comp.python.numeric.general/53705上也提出了同样的问题,但还没有令人满意的答案.

python numpy ellipsis numpy-einsum numpy-broadcasting

4
推荐指数
1
解决办法
1777
查看次数