multiprod implementation question for matrix multiplication optimization

5 visualizzazioni (ultimi 30 giorni)
Hi all. I'm trying to optimize matrix multiplication. What I am trying to do is take a stack of 3 x 3 matrices and multiply each matrix by one vector from an array of vectors .
I did find an implementation not using multiprod that solves this issue without for loops, but makes extensive use of repmat and performs worse than if I were to just use a for loop.
So for the case below: multiprod(A,B) would return [1 4 7] and [12 15 18].
A = [1 2 3; 4 5 6; 7 8 9; 10 11 12; 13 14 15; 16 17 18;]
B = [1 0; 0 0; 0 1]
Currently, multiprod assumes that you want to multiply each 3x3 by the 3x2 and as a result I get extraneous data. Adding the extra parameters about the inner dimensions to the function call did not work either.
So I guess my question is...can multiprod solve this issue and I'm just not implementing it correctly or am I better off using for loops?

Risposta accettata

Matt J
Matt J il 11 Feb 2016
Modificato: Matt J il 11 Feb 2016
If we reshape your data slightly, we can use MTIMESX ( Download )
>> A = cat(3,[1 2 3; 4 5 6; 7 8 9],[ 10 11 12; 13 14 15; 16 17 18])
A(:,:,1) =
1 2 3
4 5 6
7 8 9
A(:,:,2) =
10 11 12
13 14 15
16 17 18
>> B=reshape(B,3,1,[])
B(:,:,1) =
1
0
0
B(:,:,2) =
0
0
1
>> mtimesx(A,B)
ans(:,:,1) =
1
4
7
ans(:,:,2) =
12
15
18

Più risposte (0)

Categorie

Scopri di più su Operating on Diagonal Matrices in Help Center e File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by