【问题标题】:Euclidian Distance math error欧几里得距离数学错误
【发布时间】:2014-11-06 20:28:15
【问题描述】:
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

【问题讨论】:

  • Hailey=[0,4,1,4,0​​,0,4,1] ** 我在复制/粘贴时不小心擦掉了 1 个数字
  • 您的下一个错误将来自您无法通过分配给不存在的索引来附加到列表的事实。摆脱x 并使用temp.append(math.sqrt(...))
  • 旁注:for i in range(0,len(temp)): 通常不是最 Pythonic 的方法。

标签: python math euclidean-distance


【解决方案1】:

您使用的公式不太正确。这是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

【讨论】:

  • 我想这比我的要好得多,尽管我仍然得到一个错误:temp[x]=math.sqrt(sum(hv)**2 for h,v in zip(Hailey,Verica) ) TypeError: a float is required
猜你喜欢
  • 2013-03-02
  • 2021-03-30
  • 2015-07-15
  • 2014-02-04
  • 1970-01-01
  • 1970-01-01
  • 2021-10-01
相关资源
最近更新 更多