0

我需要矢量化以下循环

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 做了一些不同的事情。你能帮忙做这件事吗?

4

1 回答 1

3

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

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

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

c = squeeze(sum(bsxfun(@times, a, reshape(b, 1, n, k)), 2));
于 2013-08-13T17:30:12.007 回答