matrix multiplication for "3-D" matrices
2 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
MURTY KOMPELLA
el 6 de Sept. de 2019
Comentada: MURTY KOMPELLA
el 6 de Sept. de 2019
i have 8 vectors a11, a12, a21, a22 and b11, b12, b21, b22 let's say of length 1x100. i want to do a*b matrix multiplication for the 2x2 matrices [a11 a12; a21 a22] and [b11 b12; b21 b22] and along the dimension of length 100. how to code this without using do loops?
0 comentarios
Respuesta aceptada
Matt J
el 6 de Sept. de 2019
result=nan(2,2,100);
result(1,1,:)=a11.*b11 + a12.*b21;
result(1,2,:)=a11.*b12 + a12.*b22;
result(2,1,:)=a21.*b11 + a22.*b21;
result(2,2,:)=a21.*b12 + a22.*b22;
2 comentarios
Matt J
el 6 de Sept. de 2019
You're welcome, but please Accept-click the answer if you are satisfied with it.
Más respuestas (2)
Fabio Freschi
el 6 de Sept. de 2019
Let's start saying that the data structure you are using is not the best one. See https://www.mathworks.com/matlabcentral/answers/304528-tutorial-why-variables-should-not-be-named-dynamically-eval
If you really want to keep that structure, maybe the simplest answer is to make the manual multiplication
C = A*B <- matrix form
c11 = a11*b11+a12*b21 <- element form
since you have array, use .* operator
c11 = a11.*b11+a12.*b21
Note that this works only for 2x2 matrices.
For a more general approach, see
4 comentarios
Fabio Freschi
el 6 de Sept. de 2019
If you have data stored in cell arrays, you can use arrayfun
% data
N = 10;
A0 = arrayfun(@(i)rand(2,2),1:N,'UniformOutput',false);
B0 = arrayfun(@(i)rand(2,2),1:N,'UniformOutput',false);
% calculation
C = arrayfun(@(k)A0{k}*B0{k},1:N,'UniformOutput',false)
Catalytic
el 6 de Sept. de 2019
If you have the parallel computing toolbox, you can do this on the GPU with
pagefun(@mtimes,A,B)
but this may only provide gains if the pages A(:,:,i) and B(:,:,i) are large matrices.
Ver también
Categorías
Más información sobre Matrices and Arrays en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!