簡體   English   中英

MATLAB:將3d數組與2d矩陣相乘,並通過矢量化對它們求和

[英]MATLAB: Multiplication of 3d array with 2d matrix and summing them by vectorization

我有一個2乘2的矩陣A = rand(2,2)

我有一個尺寸為2乘2乘5的3d數組。

稱它為T

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];

我怎么做的操作

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

通過矢量化以最快的方式。 我想這樣做是因為3d數組通常非常龐大。

記憶允許這里的一種矢量化方法,在不同階段使用矩陣乘法進行減少 -

% 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.'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM