How to multiply each row of a matrix by different matrices, without for loops?

조회 수: 1 (최근 30일)
n = 3; m = 5; k = 10;
A = ones(n,m);
B = randn(m,k);
% I want something similar to A*B with size (n x k)
% Instead of A*B, I want each row of A multiplied with a different matrix B1,B2,B3...,Bn each of size (m x k)
% i.e. A(row,:)*B(:,:,row)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% create B1,B2,B3 ... Bn each of size (m x k)
for i=1:n
B(:,:,i) = randn(m,k);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% do what was described with a for loop
result = A(1,:)*B(:,:,1); %head case
for i=2:n
concatenayte = A(i,:)*B(:,:,i);
result = [result ; concatenayte]; %concatenated from size (1 x k) to (2 x k) to ... to finally (n x k)
end
result=result %print
% visually speaking, e.g.
%
% [B1]
% [ A ] x [B2] = [ C ]
% [B3]
% 3 x m m x k 3 x k
What I want to do is multiply each row of A of size (n x m), with different matrices, namely n-number of B's each of size (m x k).
I have done my best in making clear what I want to achieve explicitly.
How can I do the multiplication efficiently i.e. without for-loop? Is it even possible with what is offered by MatLab?
Do I perhaps need Parallel Computing Toolbox (which I don't have at the moment) or anything?
% For more context, I am trying to code backpropagtion of a flat fully connected layer with batch normalization(before activation).

채택된 답변

Raunak Gupta
Raunak Gupta 2019년 12월 4일
Hi,
For the application of implementing backpropagation, the matrix multiplication in above way will be efficient with the use of parfor since there is no space overhead by using above. Also, I suggest using gpuArray if the following implementation is required for larger matrices as it will utilize any GPU capabilities that are present with system.
As for the code that is shared, one optimization can be done by pre-allocating the result array because every time its size is changing which may slow down the code.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

태그

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by