Multiplication of matrix and first dimension of a 3-D array without for loops
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
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 commentaire
Rik
le 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?
Réponses (2)
Bruno Luong
le 13 Jan 2023
Modifié(e) : Bruno Luong
le 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')
norm(Cnoloop(:)-C(:),'Inf')
norm(Cnoloop(:)-Coneloop(:),'Inf')
0 commentaires
Voir également
Catégories
En savoir plus sur Multidimensional Arrays dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!