Продукт матрицы-вектора с использованием einsum или matmul?

Мне нужно умножить множество векторов бета на одну и ту же матрицу M.

Предположим, что матрица M имеет форму (150,7), а бета-значения хранятся в переменной формы (7,128,128).

Как бы вы вычислили продукт M * beta для каждого элемента 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() может быть здесь полезен, но я не понимаю, как определить, в каком измерении выполняется умножение / сложение.


person BayesianMonk    schedule 04.03.2020    source источник


Ответы (1)


Вот как это можно сделать с помощью 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
person yatu    schedule 04.03.2020