How to operate with multidimensional arrays (Einstein summation)?
12 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Let's imagine that I have an array of dimension 4 (A_ijkl) that I want to multiply with an array of dimension 2 (B_kl) to obtain an array of dimension 2 (C_ij; i.e., summing over indices k and l). What could be the most efficient (and clean) manner of doing so in Matlab?
And let's go one step further, what if we want to do C_ijxy=A_ijklxy * B_klxy ?
Thank you
0 Kommentare
Akzeptierte Antwort
Matt J
am 5 Dez. 2017
Bearbeitet: Matt J
am 5 Dez. 2017
You would reshape() to transform it to a 2D matrix multiplication. In the first case, this would be
A=rand(3,4,2,2);
B=rand(2,2);
C=reshape(A,12,4)*B(:);
C=reshape( C ,3,4);
For the latter case, you would have to permute() and reshape()
A=rand(3,4,2,2,6,5); B=rand(2,2,7,8);
Ap=permute(A,[1,2,5,6,3,4]);
Apr=reshape(Ap,[],4); Br=reshape(B,4,[]);
C=reshape(Arp*Br,[3,4,6,5,7,8]);
6 Kommentare
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Creating and Concatenating Matrices finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!