Эффективное умножение матриц в Matlab

#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 Спасибо, я включил ваше предложение.