Multiplication of matrix and first dimension of a 3-D array without for loops

1 view (last 30 days)
Hi,
I'm fairly new to Matlab but I was wondering if there is a way to multiply a 2-D matrix by the first dimension of a 3-D array without using for loops, and obtain another 3-D array.
The matrix, let's call it A, would be something like A(n,n), while the 3-D would be something like B(n,l,k). What I would like to do is somehow multiple A(n,n)*B(n,l,k) for every value of l and k, without going through two for loops.
Example below
A = rand(4,4);
B = rand(4,10,5);
for i = 1:10
for j = 1:5
C(:,i,j) = A(:,:)*B(:,i,j);
end
end
Thanks
  1 Comment
Rik
Rik on 13 Jan 2023
Why exactly do you want to remove the loop? And are you aware you're doing a matrix multiplication instead of an element-wise multiplication?

Sign in to comment.

Answers (2)

Bruno Luong
Bruno Luong on 13 Jan 2023
Edited: Bruno Luong on 13 Jan 2023
A = rand(4,4);
B = rand(4,10,5);
% orginal code
for i = 1:10
for j = 1:5
C(:,i,j) = A(:,:)*B(:,i,j);
end
end
% one loop code
Coneloop = zeros(size(A,1),size(B,2),size(B,3));
for j = 1:size(B,3)
Coneloop(:,:,j) = A*B(:,:,j);
end
% no loop code
Cnoloop = pagemtimes(A,B);
% Check matching
norm(Coneloop(:)-C(:),'Inf')
ans = 4.4409e-16
norm(Cnoloop(:)-C(:),'Inf')
ans = 4.4409e-16
norm(Cnoloop(:)-Coneloop(:),'Inf')
ans = 0

Matt J
Matt J on 13 Jan 2023
C=reshape( A*B(:,:) , size(B));

Categories

Find more on Multidimensional Arrays in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!