欧几里得距离

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),即X是一个5x2的矩阵。

同时,我希望结果以方阵的形式呈现。

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

3

是的,这是正确的方法。

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


我发现了pdist而不是pdist2。你对此有什么看法? - Christina

3

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

d = norm( x1 - x2, 2 ) 

计算它。如果第二个参数丢失,则默认为2-范数。


返回已翻译的文本:或者只需使用norm(x1-x2),因为2-范数是默认值。 - Chris
@Chris 是的,默认假定为2-范数。 - Dzanvu
但是在矩阵的情况下,2-范数与欧几里得范数有很大不同。 - Christina

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接