2016-04-03 7 views
2

Ich habe eine 3D-Array U und eine 2D-Matrix A. Ich möchte die Multiplikation wie folgt tun. Wie kann ich meinen Code vektorisieren? Die Schleife ist natürlich zu langsam.Vektorisierung für Array-Multiplikation

for j=1:N 
for k=1:N 
UU(:,j,k)=A*U(:,j,k); 
end 
end 

Antwort

0

Abhängig von der Größe Ihrer Matrizen, könnten Sie feststellen, dass die Beseitigung beiden Schleifen kauen vielen Speicher, und dass nur die Schleife über die Spalten zu entfernen, ist ausreichend,

for k = 1:N 
    UU(:,:,k) = A*U(:,:,k); 
end 
2

Reshape U zu 2D und führe die Matrixmultiplikation durch, wodurch die erste Achse/Dimension von U mit der letzten Achse A verkleinert wird, um ein 2D-Array zu erhalten. Schließlich, für das Endergebnis, wie folgt umformen:

[m1,n1] = size(A); 
[~,m2,n2] = size(U); 
out = reshape(A*reshape(U,[n1,m2*n2]),[m1,m2,n2]) 
Verwandte Themen