# matrix multiplication for "3-D" matrices

1 view (last 30 days)
MURTY KOMPELLA on 6 Sep 2019
Commented: MURTY KOMPELLA on 6 Sep 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?

Matt J on 6 Sep 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 CommentsShowHide 1 older comment
Matt J on 6 Sep 2019
You're welcome, but please Accept-click the answer if you are satisfied with it.

Fabio Freschi on 6 Sep 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
MURTY KOMPELLA on 6 Sep 2019
Hello Fabio, now (using arrayfun) you are going above my comfort level lol! This is very interesting, let me look into it, Thanks!

Catalytic on 6 Sep 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.
MURTY KOMPELLA on 6 Sep 2019
Hello Sir, thanks for your answer. I do not have this toolbox.