3

我有两点

 x1 = (a1,b1,c1,d1,e1);    //5 dimensional point
 x2 = (a2,b2,c2,d2,e2);    //5 dimensional point

那么这是计算欧几里得距离的正确方法吗?

  d = sqrt(sqr(a1-a2)+sqr(b1-b2)+sqr(c1-c2)+sqr(d1-d2)+sqr(e1-e2))

现在我想知道是否pdist(X)会给我同样的结果?

这里X = (x1,x2)ieX是一个 5x2 矩阵。

我也想要方阵形式的结果。

4

3 回答 3

6

对此有很多答案。一般来说,是的,你有正确的数学,虽然不是正确的 Matlab 语法。

正如你所描述的,给定一些 X:

X = [1 3 4 2 1; 8 2 3 5 4]

这是您写出的方程式的语法:

d1 = sqrt((X(1,1)-X(2,1))^2+(X(1,2)-X(2,2))^2+(X(1,3)-X(2,3))^2+(X(1,4)-X(2,4))^2+(X(1,5)-X(2,5))^2)

这里有几个更惯用的方法来格式化这个等式:

d2 = sqrt(sum(  (X(1,:) - X(2,:)).^2  ))
d3 = sqrt(sum(       diff(X,[],1).^2))

这是一种更实用的计算方法

euclidDistance = @(x,y)  sqrt(sum( (x-y).^2));
d4 = euclidDistance(X(1,:), X(2,:))

请注意,所有这些方法都返回相同的结果:d1=d2=d3=d4 = 8.3066

于 2013-03-14T05:56:45.953 回答
3

是的。这是正确的方法。

对于 MATLAB 使用pdist2(x1,x2,'euclidean')

于 2013-03-14T05:55:25.693 回答
3

由于两个向量之间的欧几里得距离是它们差的二范数,您可以使用:

d = norm( x1 - x2, 2 ) 

计算它。如果缺少第二个参数,则假定为 2 范数。

于 2013-11-27T07:43:06.647 回答