计算python中序列点的欧式距离

时间:2019-08-10 16:10:04

标签: python

我有两个列表,X_list包含n个点的x个坐标值,类似地,Y_list包含相同n个点的y个坐标值。

 X_list = [x1,x2,x3, ....., xn],
 Y_list = [y1,y2,y3, ......, yn]

我想计算每两个连续点(例如E_d1 = sqrt (x2-x1)**2 + (y2-y1)**2和&E_d2 = sqrt (x3-x2)**2 + (y3-y2)**2等之间的欧几里得距离。最后,我想得到一个包含所有n个估计E_d值的列表。 / p>

Final_E_d = [E_d1, E_d2, E_d3,......,E_dn]

我搜索并找到许多代码。

我的代码如下,但仍然给我“超出索引错误”!

import math
E_distance_list = []
def euclidean(v1, v2):
  for i in range(len(v1)):
    E_distance = math.sqrt(((v1[i] - v1[i+1]) ** 2) + ((v2[i] - v2[i+1]) ** 2))
    print(E_distance)
    E_distance_list.append(E_distance)
    print(E_distance_list)    
return E_distance_list

x = [211, 224, 244, 265, 295, 327, 369]
y = [1301, 1297, 1292, 1286, 1279, 1272, 1266]

print(euclidean(x,y))

2 个答案:

答案 0 :(得分:3)

您的错误可能是因为您的索引超出范围。考虑最后一次迭代。 i=len(v1) -1,但您正在尝试从v1[i+1]获取价值。但是,由于列表中的最后一个元素仅位于len(v1)-1的位置,因此您试图到达列表中不存在的元素。所以我用了你的代码,将范围缩小了1,代码工作正常:

import math

E_distance_list = []
def euclidean(v1, v2):
    for i in range(len(v1)-1):
        E_distance = math.sqrt(((v1[i] - v1[i+1]) ** 2) + ((v2[i] - v2[i+1]) ** 2))
#        print(E_distance)
        E_distance_list.append(E_distance)
#        print(E_distance_list)    
    return E_distance_list

x = [211, 224, 244, 265, 295, 327, 369]
y = [1301, 1297, 1292, 1286, 1279, 1272, 1266]

print(euclidean(x,y))

输出为:

[13.601470508735444, 20.615528128088304, 21.840329667841555, 30.805843601498726, 32.7566787083184, 42.42640687119285]

答案 1 :(得分:0)

计算坐标之间的欧式距离的一种不错的python方法是使用numpy

import numpy as np

def euclidean(v1, v2):
    np_v1 = np.array(v1)
    np_v2 = np.array(v2)
    return np.linalg.norm(np_v2 - np_v1) #Order depends on which way you want to calculate the Euclidean distance