Multiplying certain dimensions of two 3D matrices
Mostrar comentarios más antiguos
Hi
I've got two matrices, one 30x30x50 and one 30x30x80
I would like to multiply them in such a way that the result is a 50x80 matrix ie. an implicit sum over all of the 30x30 common elements.
eg. A*B = C
C(k,l) = A(i,j,k)*B(i,j,l) summed over all i, j
Is there a simple way to write this? I would rather avoid complications using "reshape".
Thanks, Mike
Respuesta aceptada
Más respuestas (2)
Teja Muppirala
el 14 de Mayo de 2012
A = rand(30,30,50);
B = rand(30,30,80);
C = reshape(A,900,[])'*reshape(B,900,[]);
4 comentarios
Andrei Bobrov
el 14 de Mayo de 2012
+1
Jan
el 14 de Mayo de 2012
+1
Michael
el 14 de Mayo de 2012
Michael
el 14 de Mayo de 2012
Comrun Yousefzadeh
el 17 de Jun. de 2020
Editada: Comrun Yousefzadeh
el 17 de Jun. de 2020
0 votos
I have a related questoin. I'm trying to multiply a two dimentioanl array to a specific dimension of a 3-D matrix. For example, A=2000*2000*72, B=72*3 and I'm trying to reach C=2000*2000*3. In other words B should be multiplied to the 3rd dimension of A and repeated (element wise) for 2000*2000 points in the first two dimensions. Currently I'm using a loop like this:
for ii=1:size(A,1)
for jj=1:size(A,2)
A1=A(ii,jj,:);
A1=A1(:);
C1=B'*A1; % C1 has dimension of 3*1
C2=D*C1; %D is a 3-3 matrix therefore, C2 has the same dimension as C1
C(ii,jj,:)=C2(:,1);
end
end
What is the better way to avoid the loop?
Thanks,
Categorías
Más información sobre Creating and Concatenating Matrices en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!