Нахождение евклидова расстояния между двумя списками - PullRequest
0 голосов
/ 20 марта 2020
list1=[(1116.7983351235232, 1311.3754027926993), (1116.7983351235232, 1218.42998120301), (1116.7983351235232, 1125.4845596133205), (1116.7983351235232, 1032.539138023631), (1116.7983351235232, 939.5937164339416)]

list2=[(1215.7983351235232, 1315.130773361976), (1215.7983351235232, 1223.1241944146077), (1215.7983351235232, 1131.1176154672394), (1215.7983351235232, 1039.111036519871), (1215.7983351235232, 947.1044575725027)]

Для приведенного выше списка я хочу найти евклидово расстояние между точкой в ​​list1 и всеми точками в list2. Здесь я хочу найти минимальное расстояние от точки в списке 1 до всех точек в списке 2. Кто-нибудь может подсказать, как лучше всего с ним работать?

я попробовал

for i in list1:
     for j in list2:
         list3=min(sqrt(i,j))  
            print(list3)

Я получаю сообщение об ошибке, так как AttributeError: у объекта Tuple нет атрибута _eval_power '

1 Ответ

0 голосов
/ 20 марта 2020

Я предлагаю сделать это шаг за шагом:

Сначала напишите функцию, которая вычисляет евклидово расстояние между двумя точками. Мы можем сделать это, используя теорему Пифагора о расстоянии между их соответствующими компонентами:

enter image description here

from math import sqrt

def distance(x, y):
    a, b = y[0] - x[0], y[1] - x[1]
    return sqrt(a**2 + b**2)

Теперь вы можете l oop по всем комбинациям точек и возврат всех расстояний. Я использую генератор, чтобы сделать это:

def all_distances(one, two):
    for point_a in one:
        for point_b in two:
            yield distance(point_a, point_b)

Наконец, все становится на свои места:

>>> min(all_distances(list1, list2))
99.07120069986327

Таким образом, минимальное расстояние (очень близко к) 99.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...