2017-09-14 187 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