/ / MATLAB: Multiplikation von 3D-Array mit 2D-Matrix und summiert sie durch Vektorisierung - Matlab, Vektorisierung, Matrix-Multiplikation

MATLAB: Multiplikation von 3D-Array mit 2D-Matrix und summiert sie durch Vektorisierung - Matlab, Vektorisierung, Matrix-Multiplikation

Ich habe eine 2 mal 2 Matrix A = rand(2,2).

Ich habe ein 3D-Array der Dimension 2 mal 2 mal 5.

Nennen T so dass

T(:,:,1) = [1 2;3 4];
T(:,:,2) = [5 6;7 8];
T(:,:,3) = [12 11;10 9];
T(:,:,4) = [13 15;17 19];
T(:,:,5) = [21 22;23 28];

Wie kann ich die Operationen von

J=zeros(2);
K=zeros(2);
for i = 1:5
J = J + T(:,:,i)"*A*T(:,:,i);
K = K + T(:,:,i)"*T(:,:,i);
end

durch Vektorisierung auf dem schnellsten Weg. Ich möchte es tun, weil die 3D-Array im Allgemeinen sehr große Dimension.

Antworten:

0 für die Antwort № 1

Speicher erlaubt hier einen vektorisierten Ansatz, der die Matrixmultiplikation in verschiedenen Stufen für Reduktionen verwendet -

% Store sizes
[m1,n1] = size(A);
[m2,n2,~] = size(T);

% Perform some matrix-multiplications *magic*
AT2D = reshape(A*reshape(T,m2,[]),m1,n2,[])
T2D = reshape(permute(T,[2,1,3]),n2,[])
Jout = T2D*reshape(permute(AT2D,[1,3,2]),[],n2)
Kout = T2D*T2D."