使用 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
我需要将很多向量 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