【发布时间】:2015-09-20 11:19:22
【问题描述】:
假设我有 2 个向量,我想做一个外积。我可以使用:
A=x*y';
或者我可以像这样使用bsxfun:
bsxfun(@times,x,y')
但我想批量处理外部产品。我有 2 个矩阵,每个都有 p 向量:
n=1000; p=6;
A=rand(n,p);
D=rand(n,p);
我想计算所有外部产品并将结果相加,如下所示:
AA=zeros(n,n);
for j=1:p
AA = AA + A(:,j) * D(:,j).';
end
我想更有效地做到这一点,但我不知道怎么做。
【问题讨论】:
-
您正在寻找一种将
bsxfun与permute结合使用的解决方案。 -
C = bsxfun(@times,A,permute(D.',[3 1 2]));在很短的时间内给了我一个1000x6x1000,但我不确定这是不是正确的结果。 -
结果应该是 1000x1000
-
@Adriaan 干得好!所以,在那之后,用
sum(C,2)去掉第二个dim,从而用bxsfun模拟矩阵乘法。 -
@Divakar 感谢您的提示。今晚我会输入答案。
标签: matlab vectorization bsxfun