我需要对以下循环进行矢量化
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做了不同的事情。你可以帮忙做这件事吗?
答案 0 :(得分:3)
我认为您可以使用bsxfun
,如下所示(现在无法测试 - 请告诉我这是否会给您带来麻烦):
c = squeeze(sum(bsxfun(@times, a, b), 2));
bsxfun
将扩展矩阵b,然后逐个元素乘法。第二维上的求和运算负责“矩阵乘法”方面。您可能需要展开{{1}}以获得显式单例第一维:
b