查找两个列表之间的欧几里得距离

时间:2020-03-20 14:18:05

标签: python list

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中的所有点之间的欧几里得距离。 在这里,我想找到从list1中的点到list2中所有点的最小距离。 有人可以建议最好的方法是什么吗?

我尝试了

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

由于 AttributeError:“元组”对象没有属性“ _eval_power”

1 个答案:

答案 0 :(得分:0)

我建议逐步进行此操作:

首先,编写一个函数来计算两点之间的欧式距离。我们可以通过使用毕达哥拉斯定理在它们各自的分量之间的 distance 上实现:

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)

现在,您可以遍历点的所有组合并返回所有距离。我将使用生成器来做到这一点:

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。