2017-05-31 153 views
2

我有一个大小为KxN的矩阵A。我想把这个矩阵的每一列与它自身之间的外部产品,创建一个尺寸为KxKxN的新矩阵。我可以通过做反复做这个:通过编写一个MEX文件外部产品计算的向量化

N = 5; 
K = 3; 

A = rand(K,N); 

nA = zeros(K,K,N); 
for n=1:N 
    nA(:,:,n) = nA(:,:,n) + A(:,n)*A(:,n)'; 
end 

或更快(当N大)。但是,我还没有弄清楚我是否可以以矢量化的方式做到这一点。有任何想法吗?

回答

4

如果您将阵列重新整形为尺寸为[K,1,N][1,K,N](即在适当的位置插入单一维),则只需使用数组广播将它们相乘即可。

较新版本的MATLAB与隐广播:MATLAB的

nA_bcast = reshape(A,[1,K,N]).*reshape(A,[K,1,N]) 

旧版本与bsxfun帮助:

nA_bsxfun = bsxfun(@times, reshape(A,[1,K,N]),reshape(A,[K,1,N])) 

三个相关阵列(即nAnA_bcastnA_bsxfun)都一样。附注:A'将是伴音,您可能意味着A.'转置。

+0

谢谢!很好的答案。 – Smajjk

+0

@Smajjk我很高兴它帮助:)如果上述确实解决了您的问题,请考虑标记我的答案为接受。 –

+1

行动中,错过了这个,完成了! – Smajjk