回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我想用n维m*m矩阵堆栈乘以n维向量堆栈(长度m),这样得到的m*n数组包含第n项中矩阵和向量的点乘结果:</p>
<pre><code>vec1=np.array([0,0.5,1,0.5]); vec2=np.array([2,0.5,1,0.5])
vec=np.transpose(n.stack((vec1,vec2)))
mat = np.moveaxis(n.array([[[0,1,2,3],[0,1,2,3],[0,1,2,3],[0,1,2,3]],[[-1,2.,0,1.],[0,0,-1,2.],[0,1,-1,2.],[1,0.1,1,1]]]),0,2)
outvec=np.zeros((4,2))
for i in range(2):
outvec[:,i]=np.dot(mat[:,:,i],vec[:,i])
</code></pre>
<p>受这篇文章<a href="https://stackoverflow.com/questions/43415207/element-wise-dot-product-of-matrices-and-vectors">Element wise dot product of matrices and vectors</a>的启发,我尝试了einsum中所有不同的索引组合扰动,并发现</p>
^{pr2}$
<p>给出正确的结果。在</p>
<p>不幸的是,我真的不明白这一点-我假设我重复'ijk,jk'部分中的条目k意味着我乘以k并求和。我试图阅读文档<a href="https://docs.scipy.org/doc/numpy-1.15.1/reference/generated/numpy.einsum.html" rel="nofollow noreferrer">https://docs.scipy.org/doc/numpy-1.15.1/reference/generated/numpy.einsum.html</a>,但我仍然不明白。在</p>
<p>(我之前的尝试包括</p>
<pre><code> np.einsum('ijk,il->ik', mat, vec)
</code></pre>
<p>我甚至不知道这意味着什么。当我放弃索引l时,它会发生什么变化?)在</p>
<p>提前谢谢!在</p>