我有一个包含100个N-dimensional
向量的列表和一个100 MxN
矩阵列表。因此,您可以将这两个数据结构视为100xN
列表(或numpy数组)和100xMxN
列表(或numpy数组)。
我想要做的是获取每个向量及其相应矩阵的点积,使得输出应该是100 M-dimensional
矩阵(即100xM
列表或numpy数组)。
但是,我不确定如何做到这一点。出于效率的明显原因,我不想迭代地这样做。我也知道它不是基本的矩阵乘法。我想我可能想使用np.einsum
,但我并不过分熟悉它。
有人愿意帮忙吗?
答案 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]