Python:将矩阵列表中的向量列表乘以单个矩阵运算

时间:2017-09-14 08:12:56

标签: python numpy matrix linear-algebra

我有一个包含100个N-dimensional向量的列表和一个100 MxN矩阵列表。因此,您可以将这两个数据结构视为100xN列表(或numpy数组)和100xMxN列表(或numpy数组)。

我想要做的是获取每个向量及其相应矩阵的点积,使得输出应该是100 M-dimensional矩阵(即100xM列表或numpy数组)。

但是,我不确定如何做到这一点。出于效率的明显原因,我不想迭代地这样做。我也知道它不是基本的矩阵乘法。我想我可能想使用np.einsum,但我并不过分熟悉它。

有人愿意帮忙吗?

1 个答案:

答案 0 :(得分:6)

你可以这样使用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]