逐层乘以矩阵

时间:2013-08-26 11:59:31

标签: matlab matrix octave vectorization bsxfun

我想在没有循环的情况下这样做:

% A ~ 4x2x3; B ~ 4x3x2; C ~ 4x2x2;
for i=1:4
  C(i,:,:) =  squeeze(A(i,:,:))*squeeze(B(i,:,:));
end

谢谢!

1 个答案:

答案 0 :(得分:1)

没有对此进行基准测试(所以这不能保证更快),但这里有:

[L, ma, na] = size(A);
[L, mb, nb] = size(B);
AX = reshape(permute(A, [2 1 3]), [], na);
BX = reshape(permute(B, [2 3 1]), mb, []);
CX = reshape(permute(reshape(AX * BX, ma, L, nb, L), [1 3 2 4]), ma, nb, []);
C = permute(CX(:, :, 1:L + 1:end), [3 1 2]);

请注意,如果AB很大,您可能还会遇到内存问题(在这种情况下,您将不得不求助于循环)。