Python:将向量列表乘以矩阵列表,作为单个矩阵操作

4
我有一个包含100个N维向量以及100个MxN矩阵的列表。你可以将这两种数据结构看作是一个包含100行N列(或numpy数组)和另一个包含100个M行N列(或numpy数组)的列表。
我想要做的是对每个向量和它对应的矩阵进行点积,输出应该是100个M维矩阵(即一个包含100行M列的列表或numpy数组)。
然而,我不知道该如何实现。我不想使用迭代的方式,因为效率很低。我也知道这不是基本的矩阵乘法。我认为可能需要使用np.einsum,但我对它并不是非常熟悉。
有人可以帮忙吗?
1个回答

9

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

2
运行得非常好。我建议任何不确定为什么这个解决方案有效的人都访问此页面:http://ajcr.net/Basic-guide-to-einsum/。现在很清楚了。 - anon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接