У меня есть два 2D-списка с координатами x и y, и я хочу пройти через list1, и для каждой точки найдите ближайшую (x, y) координаты в списке2. Они имеют разную длину, и все в порядке, если я не использую все точки списка2 или даже если я повторно использую точки, если я просматриваю все точки только один раз в списке1. Мне нужен сам сдвиг, а также расположение в списках обеих точек. Вот что я сделал, чтобы найти сдвиг:Как найти ближайшую (x, y) позицию к (x, y) в другом списке?
s_x = ([1.0,2.0,3.0])
s_y = ([1.5,2.5,3.5])
SDSS_x = ([3.0,4.0,5.0])
SDSS_y = ([3.5,4.5,5.5])
list1 = zip(s_x,s_y)
list2 = zip(SDSS_x,SDSS_y)
shift = []
place_in_array = []
for num,val in enumerate(list1):
guess = 9999999999999.0
place_guess = 0
for index,line in enumerate(list2):
new_guess = math.hypot(line[0] - val[0], line[1] - val[1])
if new_guess < guess:
guess = new_guess
place_guess = index
shift.append(guess)
place_in_array.append(place_guess)
print shift
print place_in_array
но вывод таков:
[2.8284271247461903, 1.4142135623730951, 0.0]
[0, 0, 0]
Это неправильно, и я не могу понять, в чем проблема.
Выход у вас есть правильно, по крайней мере, согласно моей интерпретации желаемого результата. 1-й пункт в 'list2', (3.0.3.5) является ближайшей точкой для всех трех точек в «list1», поэтому «place_in_array» - это показатель нулевого индекса, 1-й пункт в «list2», а соответствующие расстояния от каждой точки в «list1» - это значения в ' shift'. –