计算matlab中三维点对的欧氏距离

时间:2014-09-11 06:34:00

标签: arrays matlab matrix euclidean-distance

我有一个包含N个3D点的Nx3阵列

a1 b1 c1 
a2 b2 c2
.... 
aN bN cN 

我想计算NxN数组中的欧几里德距离,该数组测量每对3D点之间的欧几里德距离。结果数组中的(ij)会返回(ai,bi,ci)(aj,bj,cj)之间的距离。是否可以在没有循环的matlab中编写代码?

3 个答案:

答案 0 :(得分:1)

使用pdistsquareform

D = squareform( pdist(X, 'euclidean' ) ); 

对于初学者来说,使用计算距离矩阵D是一项很好的练习(悬停以查看解决方案)。

  

elemDiff = bsxfun( @minus, permute(X,[ 1 3 2 ]), permute(X, [ 3 1 2 ]) );
D = sqrt( sum( elemDiff.^2, 3 ) );

答案 1 :(得分:1)

你的问题的挑战是制作一个N * N矩阵,结果应该在这个矩阵中返回而不使用循环。 我通过为Bsxfun函数提供合适的维度来克服这一挑战。默认情况下,当我们调用bsxfun函数时,X和ReshapedX应具有相同的尺寸。但是如果矩阵的大小不相等并且其中一个具有单个(等于1)维度,则矩阵实际上沿着该维度复制以匹配另一个矩阵。因此,它返回N * 3 * N矩阵,它提供每个3D点的减法。

ReshapedX = permute(X,[3,2,1]);
DiffX = bsxfun(@minus,X,ReshapedX);
DistX =sqrt(sum(DiffX.^2,2));
D = squeeze(DistX);

答案 2 :(得分:0)

完成Divakar的评论:

x = rand(10,3);
pdist2(x, x, 'euclidean')