2014-05-15 36 views
1

我正在寻找一种有效的方法来执行两个时间相关的2D矩阵的矩阵乘法(点积),最终得到一个时间相关的2D矩阵。Numpy时间相关的2D矩阵乘法

例如:

a = np.zeros([7200,13,4]) 
b = np.zeros([7200,4,7]) 

而且我想

c = np.zeros([7200,13,7]) 

我已经找到np.tensordot结束了,但是这会产生我一个四维矩阵,而不是一个三维矩阵。另外其他numpy功能并没有使我获得所需的形状。所以我想知道是否有任何方法来执行这种矩阵乘法而不使用for-loops?

最好的问候,

蒂莫西·范·Daele

+0

我只是深入了一点,我相信我发现了一个在numpy中使用einsum函数的高效解决方案。 'a = np.zeros([7200,13,4])+ 1' 'b = np.zeros([7200,4,7])+ 1' 'c = np.einsum('ijk ,ikl-> IJL”,A,b)'' c.shape' '(7200,13,7)' 最好的问候, 蒂莫西·范·Daele – TimothyVD

+0

这样你就可以删除的问题? – usethedeathstar

+0

您应该将您的评论写为答案,并且(如果时间限制已满)将其标记为已接受,以帮助未来的访问者访问此页面。 – YXD

回答

1

我只是挖一点点深入,我发现numpy的功能einsum。这为做矢量乘法提供了很大的自由度。

a = np.zeros([7200,13,4]) 
b = np.zeros([7200,4,7]) 

c = np.einsum('ijk,ikl->ijl',a,b) 
c.shape (7200, 13, 7)