如何使用 numpy 将 N 个向量乘以 N 个矩阵?
How to multiply N vectors by N matrices using numpy?
我有一个形状为 (N, L)
的矩阵 M
和一个形状为 (N, L, K)
的 3D 张量 P
。我想获得形状为 (N, K)
的矩阵 V
,其中 V[i] = M[i] @ P[i]
。我可以用 for 循环来做,但效率很低,我想用一个或几个操作来做,这样它就可以在 CUDA 上并行 运行。
我试过像这样乘法
V = M @ P
但这会导致 3D 张量,其中 V[i, j] = M[j] @ P[i]
。
np.diagonal(M @ P).T
基本上是我想要的,但是这样计算很浪费计算量。
您可以使用 np.einsum
:
>>> M = np.random.rand(5, 2)
>>> P = np.random.rand(5, 2, 3)
>>> V = np.einsum('nl,nlk->nk', M, P)
>>> V.shape
(5, 3)
我有一个形状为 (N, L)
的矩阵 M
和一个形状为 (N, L, K)
的 3D 张量 P
。我想获得形状为 (N, K)
的矩阵 V
,其中 V[i] = M[i] @ P[i]
。我可以用 for 循环来做,但效率很低,我想用一个或几个操作来做,这样它就可以在 CUDA 上并行 运行。
我试过像这样乘法
V = M @ P
但这会导致 3D 张量,其中 V[i, j] = M[j] @ P[i]
。
np.diagonal(M @ P).T
基本上是我想要的,但是这样计算很浪费计算量。
您可以使用 np.einsum
:
>>> M = np.random.rand(5, 2)
>>> P = np.random.rand(5, 2, 3)
>>> V = np.einsum('nl,nlk->nk', M, P)
>>> V.shape
(5, 3)