2017-09-14 189 views
1

我有一列100 N-dimensional矢量和一列100 MxN矩陣。因此,您可以將這兩種數據結構看作100xN列表(或numpy數組)和100xMxN列表(或numpy數組)。Python:將矩陣列表中的矢量列表乘以單個矩陣運算

我想要做的是取每個向量及其對應矩陣的點積,使得輸出應該是100 M-dimensional矩陣(即100xM列表或numpy數組)。

但是,我不確定如何做到這一點。我不想迭代地做,因爲效率顯而易見。我也知道這不是基本的矩陣乘法。我想我可能想使用np.einsum,但我不太熟悉它。

有人幫忙嗎?

回答

5

您可以使用np.einsum像這樣 -

np.einsum('ij,ikj->ik',a,b) 

採樣運行 -

In [42]: M,N = 3,4 

In [43]: a = np.random.rand(100,N) 

In [44]: b = np.random.rand(100,M,N) 

In [45]: np.einsum('ij,ikj->ik',a,b).shape 
Out[45]: (100, 3) 

您還可以使用np.matmul@運營商(Python 3.x都有),但它似乎略高於einsum慢 -

np.matmul(a[:,None],b.swapaxes(1,2))[:,0] 
+1

工作就像一個魅力。我建議[本頁](http://ajcr.net/Basic-guide-to-einsum/)爲任何人不確定此解決方案的工作原理。現在很清楚。 – anon