2014-05-15 32 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)