在matlab中矢量化外部产品的总和

时间:2013-04-22 02:00:58

标签: matlab optimization vectorization

有关如何对此代码进行矢量化的任何想法?结果S应为3x3。

%PNorm is n x 3
S = zeros(3,3,n);
%TODO vectorize
for i = 1:n
    S(:,:,i) = Pnorm(i,:)'*Pnorm(i,:);
end
S = sum(S, 3);

2 个答案:

答案 0 :(得分:2)

有什么理由不这样做:

S = Pnorm' * Pnorm;

嗯?

答案 1 :(得分:0)

对于显式计算,您可以交换bsxfun

的循环
S = bsxfun( @times, permute( Pnorm, [2 3 1]), permute( Pnorm, [3 2 1] ) );
S = sum( S, 3 );

但是,为了有效计算,请参阅EitanT的回答。