2011-06-05 59 views
1
rv=[rx ry rz]; %# [N-by-3] rx , ry , rz are [N-by-1] 

for i=1:N 
    for j=1:N 
     dx(i,j)=rv(i,1)-rv(j,1); %# dx is x component of distance between each 2 points [N-by-N] 
     dy(i,j)=rv(i,2)-rv(j,2); 
     dz(i,j)=rv(i,3)-rv(j,3); 
    end 
end 
d=cat(3,dx,dy,dz); 

是否有更快的方法来构造d3D中每个2点之间的相互距离

非常感谢任何指导。

编辑:

N= 997 
Me:    Elapsed time is 17.271125 seconds. 
DiggyF:   Elapsed time is 0.241841 seconds. 
Oli Charlesworth: Elapsed time is 0.120425 seconds. 
N=1986 
DiggyF   : Elapsed time is 1.183639 seconds. 
Oli Charlesworth: Elapsed time is 0.502964 seconds. 

回答

2

下面是避免显式循环的方法:

dx = repmat(rx, 1, N) - repmat(rx.', N, 1); 

我不知道是否会工作得更快;你必须尝试一下!

1

这也将工作:

dx = meshgrid(rx) - meshgrid(rx)' 
dy = meshgrid(ry) - meshgrid(ry)' 
dz = meshgrid(rz) - meshgrid(ry)' 

也看一下pdist功能,如果你有统计工具箱或倍频。