Евклидово расстояние между элементами списка
У меня есть список словаря следующим образом:
list = [{a: 3, b: 2}, {a: 7, b: 9}, {a: 9, b: 11}]
Я хочу вычислить евклидово расстояние между каждым элементом списка и каждым другим.
Я не могу узнать, как мне этого добиться. Пожалуйста, предложите мне pythonic способ рассчитать это.
3 ответа
Выберите два элемента одновременно
использовать itertools
import itertools
for pointA, pointB in itertools.combinations(list, 2):
distance(pointA,pointB)
где расстояние ваша функция, чтобы получить расстояние с помощью точек
Ты можешь использовать itertools.combinations
сделать это. Выберите 2 элемента из списка одновременно.
from itertools import combinations
from math import sqrt
for first,second in combinations(lst,2):
print sqrt((first['a']-second['a'])**2 + (first['b']-second['b'])**2)
Если вы хотите рассчитать расстояние с учетом элемента с самим собой, используйте combinations_with_replacement
,
from itertools import combinations_with_replacement
for first,second in combinations_with_replacement(lst,2):
#same_as_before
Если вы предпочитаете все доступные перестановки, а не комбинации, используйте:
from itertools import permutations
for first,second in permutations(lst,2):
#same_as_before
Если вы хотите узнать больше об itertools, читайте здесь
Вы можете сделать что-то вроде этого:
from itertools import combinations
from math import sqrt
def get_euclidean_distance(point1, point2):
distance = sqrt((point1['a']-point2['a'])**2 + (point1['b']-point2['b'])**2)
return distance
if __name__ == '__main__':
my_list =[{'a':3,'b':2},{'a':7,'b':9},{'a':9,'b':11}]
for point1, point2 in combinations(my_list,2):
print 'Euclidean distance between', point1, 'and', point2, 'is', get_euclidean_distance(point1, point2)