Продукт Matrix-Vector с использованием einsum или matmul? - PullRequest
0 голосов
/ 04 марта 2020

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

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

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

1 Ответ

1 голос
/ 04 марта 2020

Вот как это можно сделать, используя 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...