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”
答案 0 :(得分:0)
我建议逐步进行此操作:
首先,编写一个函数来计算两点之间的欧式距离。我们可以通过使用毕达哥拉斯定理在它们各自的分量之间的 distance 上实现:
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。