#python #matlab #numpy #matrix #matrix-multiplication
#python #matlab #numpy #матрица #матрица-умножение
Вопрос:
У меня есть две матрицы, A
(N на K) и B
(N на M), и я хотел бы сконцентрироваться A
и B
на тензоре C
(N на K на M), где C(n,k,m) = A(n,k) * B(n,m)
. Я знаю, как это сделать на Python, например
C = B[:,numpy.newaxis,:] * A[:,:,numpy.newaxis]
Может кто-нибудь, пожалуйста, подскажите мне код matlab, который эффективно выполняет то же самое?
Ответ №1:
Воспользуйтесь неявной функцией расширения bsxfun
. Используйте permute
, чтобы иметь вашу B
матрицу в виде Nx1xM:
C = bsxfun(@times, A, permute(B, [1, 3, 2]));
И начиная с MATLAB R2016b, вы можете получить тот же результат таким образом:
C = A * permute(B, [1, 3, 2]);
Комментарии:
1. Я бы также упомянул новый синтаксис MATLAB (для R2016b и далее), который не требует
bsxfun
: (C = A * permute(B, [1, 3, 2]);
).2. @Dev-iL Спасибо, я включил ваше предложение.