代码之家  ›  专栏  ›  技术社区  ›  IseNgaRt

欧几里得距离数学错误

  •  2
  • IseNgaRt  · 技术社区  · 10 年前
    import math
    from math import sqrt
    
    Hailey=[0,4,1,4,0,0,4,1]
    Verica=[3,0,0,5,4,2.5,3,0]
    temp=[]
    distance=0
    x=0
    
    for i in range(0,len(Hailey)):
        if (Hailey[i]!=0 and Verica[i]!=0):
            temp[x]=math.sqrt(abs(Hailey[i]**2) - abs(Verica[i]**2))
            x=x+1
    for i in range(0,len(temp)):
        distance=distance+temp[i]
    print("distance is",distance)   
    

    我正在尝试制作一个程序来计算两个人之间的欧氏距离。这在数学上似乎不正确,我明白了:

        distance=distance + math.sqrt(abs(Hailey[i]**2) - abs(Verica[i]**2))
    ValueError: math domain error
    
    1 回复  |  直到 10 年前
        1
  •  6
  •   NPE    10 年前

    你使用的公式不太正确。这是 correct formula :

    >>> math.sqrt(sum((h-v)**2 for h, v in zip(Hailey, Verica)))
    7.158910531638177
    

    或者,如果你想使用 NumPy :

    >>> Hailey = numpy.array([0,4,1,4,0,0,4,1])
    >>> Verica = numpy.array([3,0,0,5,4,2.5,3,0])
    >>> numpy.linalg.norm(Hailey - Verica)
    7.1589105316381767