我必须逐个元素地将数组A
和B
相乘,并计算第一个维度的总和,然后在C
中返回结果。 A
是一个N
- by - M
- by - L
矩阵。 B
是一个N
- by - 1
- by - L
矩阵。 N
和M
低于30
,但L
非常大。我的代码是:
C=zeros(size(B));
parfor i=1:size(A,2)
C(i,1,:) = sum(bsxfun(@times, A(:,i,:), B(:,1,:)), 1);
end
问题是代码很慢,任何人都可以帮助使代码更快?非常感谢你。
答案 0 :(得分:0)
如何做到这一点:
C = permute(sum(A.*repmat(B,1,M)),[2,1,3]);
这使我的电脑计算速度提高了约4倍。有趣的是,只需将parfor
循环更改为for
循环,您实际上可以将计算速度提高2倍(至少在我的PC上)。
答案 1 :(得分:0)
根据路易斯·门多的评论,我建议使用这个命令:
C=reshape(sum(bsxfun(@times, A, B), 1), size(B))
我认为这是最快的。
答案 2 :(得分:0)
如果我理解正确,请执行此操作:
C = squeeze(sum(bsxfun(@times, A, B)));
这使得C
的大小为M x L.