【问题标题】:Multiply matrices layer by layer将矩阵逐层相乘
【发布时间】:2013-08-28 21:48:33
【问题描述】:

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

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

谢谢!

【问题讨论】:

  • @Dan 谢谢!但我需要一个简单的代码...
  • 这不应该是C(i, :, :) = squeeze(A(i, :, :)) * squeeze(B(i, :, :))还是什么的?
  • 你的意思可能是C(i,:,:) = A(i,:,:)*B(i,:,:);而不是C(i,:,:) = A*B;
  • 这和你之前问的一样(家庭作业)问题吗? stackoverflow.com/questions/18441163/…在这种情况下,下次您发现您的初始问题不清楚时,请不要创建新问题,只需编辑您的问题以使其更清楚。

标签: matlab matrix octave vectorization bsxfun


【解决方案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 很大,您也可能会遇到内存问题(在这种情况下,您将不得不求助于循环)。

【讨论】:

    猜你喜欢
    • 2015-04-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-24
    • 2016-12-11
    • 1970-01-01
    • 2022-06-30
    • 1970-01-01
    相关资源
    最近更新 更多