我有一个100个N-dimensional向量的列表和一个100 MxN矩阵列表。因此,您可以将两个数据结构视为一个100xN列表(或numpy数组)和一个100xMxN列表(或numpy数组)。
N-dimensional
100 MxN
100xN
100xMxN
我想做的是获取每个向量与其对应矩阵的点积,这样输出应该是100 M-dimensional矩阵(即100xM列表或numpy数组)。
100 M-dimensional
100xM
但是,我不确定如何执行此操作。由于效率的明显原因,我不想重复进行此操作。我也知道这不是基本的矩阵乘法。我想我可能想使用np.einsum,但我对此不太熟悉。
np.einsum
有人愿意帮助吗?
您可以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
@
einsum
np.matmul(a[:,None],b.swapaxes(1,2))[:,0]