使用 einsum 或 matmul 的矩阵向量积?

Matrix-Vector product using einsum or matmul?

我需要将很多向量 beta 与同一个矩阵 M 相乘。

假设矩阵 M 的形状为 (150,7),并且 beta-s 存储在形状为 (7,128,128) 的变量中。

您将如何计算 beta 的每个元素的乘积 M*beta?

直到知道我正在这样做:

import numpy as np

M=np.ones((150,7))
beta=np.ones((7,128,128))

result=M@(beta.reshape((7,128*128))) # the result has shape (150,128*128)
result=np.reshape(result,(150,128,128))

我猜 np.einsum() 在这里可能会有用,但我不明白如何告诉它在哪个维度上执行 multiplication/addition。

以下是使用 np.einsum 执行此操作的方法:

np.einsum('ij,jkl->ikl', M, beta)

result=M@(beta.reshape((7,128*128))) # the result has shape (150,128*128)
result=np.reshape(result,(150,128,128))

np.allclose(np.einsum('ij,jkl->ikl', M, beta), result)
# True