[英]Numpy Dot Product of two 2-d arrays in numpy to get 3-d array
对不起,标题写得很糟糕。 我试图并行化我的代码的一部分,并陷入一个点产品。 我正在寻找一种有效的方法来做下面的代码,我确信有一个简单的线性代数解决方案,但我很困惑:
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],
[ 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,jk->kij', puy, puy2), zz)
True
这是broadcasting
的另一种方式 -
(puy[None,...]*puy2[:,None,:]).T
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.