2017-05-31 99 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