我有两个列表,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))
答案 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