【问题标题】:Euclidean Distance欧几里得距离
【发布时间】:2013-03-02 08:41:55
【问题描述】:

我有两点

 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 矩阵。

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

【问题讨论】:

    标签: matlab matrix euclidean-distance


    【解决方案1】:

    对此有很多答案。一般来说,是的,你有正确的数学,虽然不是正确的 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

    【讨论】:

      【解决方案2】:

      是的。这是正确的方法。

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

      【讨论】:

      • 我发现 pdist 不是 pdist2 。你对此有何看法?
      【解决方案3】:

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

      d = norm( x1 - x2, 2 ) 
      

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

      【讨论】:

      • 或只是 norm(x1-x2),因​​为 2-norm 是默认值。
      • @Chris 是的,假设默认 2-norm。
      • 但在矩阵的情况下,2-范数与欧几里得完全不同
      猜你喜欢
      • 2015-07-15
      • 2014-02-04
      • 1970-01-01
      • 2021-10-01
      • 2012-12-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多