对不起,
标题写得很糟糕.我试图并行化我的
代码的一部分,并陷入一个点产品.我正在寻找一种有效的
方法来做下面的
代码,我确信有一个简单的线性代数
解决方案,但我很困惑:
puy = np.arange(8).reshape(2,4)
puy2 = np.arange(12).reshape(3,4)
print puy,'\n'
print puy2.T
zz = np.zeros([4,2,3])
for i in range(4):
zz[i,:,:] = np.dot(np.array([puy[:,i]]).T,np.array([puy2.T[i,:]]))
一种
方法是使用
np.einsum
,它允许您指定您希望发生在索引上的
内容:
>>> np.einsum('ik,jk->kij',puy,puy2)
array([[[ 0,0],[ 0,16,32]],[[ 1,5,9],[ 5,25,45]],[[ 4,12,20],[12,36,60]],[[ 9,21,33],[21,49,77]]])
>>> np.allclose(np.einsum('ik,puy2),zz)
True