【问题标题】:Matrix multiplication with different dimensions不同维度的矩阵乘法
【发布时间】:2013-08-15 10:38:16
【问题描述】:

我需要向量化下面的循环

a=rand(m,n,k)
b=rand(n,k)
c=zeros(m,k)
for ik=1:k
  c(:,ik)=a(:,:,ik)*b(:,ik)
end

我找不到任何执行此操作的 matlab 函数,我认为 bsxfun @multiply 做了一些不同的事情。你能帮忙做这件事吗?

【问题讨论】:

    标签: matlab matrix multidimensional-array vectorization multiplication


    【解决方案1】:

    我认为您可以按如下方式使用bsxfun(现在无法对此进行测试 - 如果这给您带来麻烦,请告诉我):

    c = squeeze(sum(bsxfun(@times, a, b), 2));
    

    bsxfun 将扩展矩阵 b 然后进行逐个元素的乘法。第二维上的求和运算负责“矩阵乘法”方面。您可能需要扩展 b 以获得明确的单例第一维:

    c = squeeze(sum(bsxfun(@times, a, reshape(b, 1, n, k)), 2));
    

    【讨论】:

    • 这个操作相乘: a(:,:,ik)*b ,但我需要 a(:,:,ik)*b(:,ik)
    • @Parsa:与您的循环相比,上面的第二个版本产生相同的输出。
    • @horchler 你是对的。我犯了一个错误。谢谢