Я реализую простой код, который вычисляет расстояние между точкой (x_a, y_a)
в list_A
и всеми точками (x_b, y_b)
в list_B
и возвращает минимальное найденное расстояние. Это повторяется для всех точек в list_A
.Ускорение простого вычисления расстояния
А MWE
моего кода:
# list_A points defined in array.
list_A = np.array([
[x_data_a, # x
y_data_a] # y
], dtype=float)
# list_B points defined in list.
list_B = [[x_data_b], [y_data_b]]
# Iterate through all data points in list_A
for ind, x_a in enumerate(list_A[0][0]):
y_a = list_A[0][1][ind]
# Iterate through all points in list_B.
dist_min = 1000.
for ind2, x_b in enumerate(list_B[0]):
y_b = list_B[1][ind2]
# Find distance between points.
dist = (x_a-x_b)**2 + (y_a-y_b)**2
if dist < dist_min:
# Update value of min distance.
dist_min = dist
print 'Min dist to (', x_a, y_a, '): ', dist_min
Данные отформатирован следующим образом:
list_A = [[[1.2 2.3 1.5 2.3 5.8 4.6 9.1] [2.5 1.0 4.6 2.4 7.4 1.1 3.2]]]
list_B = [[1.4, 5.8, 7.9], [6.1, 1.2, 3.7]]
Для больших списков/массивов это может занять некоторое время, чтобы закончить. Можно ли это ускорить?
Основываясь на ваших комментариях к некоторым ответам, я понимаю, что не понимаю формат ваших данных. Вы говорите, что 'x_data_a' - это сама последовательность точек? Можете ли вы представить простой пример своей структуры данных с буквальными численными значениями? – BrenBarn
См. Отредактированный вопрос. Я думаю, что использование 'zip' могло бы сделать трюк, потому что я получаю значение ValueError: XA и XB должны иметь одинаковое количество столбцов (т. Е. Размерности.)' Error. – Gabriel
Ваш пример все еще не имеет смысла. Я не вижу там никаких пунктов, просто списки отдельных номеров. У вас не может быть '...' внутри ваших отдельных точек, потому что тогда вы не будете знать размерности точек и не сможете найти расстояния между ними. Просьба представить небольшой литерал без '...'. – BrenBarn