MATLAB:将3d数组与2d矩阵相乘,并通过矢量化对它们求和

时间:2016-08-27 22:00:32

标签: matlab vectorization matrix-multiplication

我有一个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数组通常非常庞大。

1 个答案:

答案 0 :(得分:0)

内存允许这里使用矩阵乘法在不同阶段进行缩减的一种矢量化方法 -

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