Multiply a "stack" of matrices with a "stack" of vectors

I have a matrix 2 x 2 x n and a vector 2 x n. So basically, I have n layers of 2 x 2 matrices and n layers of vectors with 2 entries. I d like to do a matrix-vector multiplication on each layer.
I could easily do this using a for loop, but is there a way which directly supports such an operation?

 Accepted Answer

One option:
n = 6
% M is your 2x2xn array of "matrices
M = rand(2,2,n)
% V is your 2xn array of "vectors"
V = rand(2,n)
fh = @(k) M(:,:,k) * V(:,k)
C = arrayfun(fh,1:n,'un',0)
C2 = cat(3,C{:})
Corrected.

3 Comments

There's one little error in your code on the last line I think. C2 = cat(3, C{;}) would be correct.
It works, but it's not much faster than in the for loop.
You did ask for " a way which directly supports such an operation ", not for a faster way! ;-)
To be honest, I think a straight forward for-loop is as good as the accumarray approach in this case.
If you want speed, I would suggest looking at one of the solutions I have posted.

Sign in to comment.

Categories

Find more on Loops and Conditional Statements 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!