2014-09-12 151 views
2
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) 

我試圖做一個程序,發現2人之間的歐幾里德距離。它似乎並沒有數學上的相關性,我得到這個:歐幾里德距離數學錯誤

distance=distance + math.sqrt(abs(Hailey[i]**2) - abs(Verica[i]**2)) 
ValueError: math domain error 
+0

海利= [0,4,1,4,0​​,0,4,1] **我不期而遇在複製/粘貼時刪除1位數 – IseNgaRt 2014-09-12 15:45:10

+0

您的下一個錯誤將來自您無法通過分配給不存在的索引追加到列表的事實。擺脫'x'並使用'temp.append(math.sqrt(...))'。 – chepner 2014-09-12 15:49:59

+0

旁註:'我在範圍內(0,len(temp)):'通常不是Pythonic最常用的方法。 – Teepeemm 2014-09-12 22:47:56

回答

6

您使用的公式不太正確。這裏是​​:

>>> 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 
+0

+1非常我們的解決方案 – 2014-09-12 15:48:50

+0

我想這比我的方式更好雖然我仍然得到一個錯誤: temp [x] = math.sqrt(sum(hv)** 2 for h,v in zip(Hailey,Verica )) TypeError:需要浮點數 – IseNgaRt 2014-09-12 15:51:47