簡體   English   中英

查找兩個列表之間的歐幾里德距離

[英]Finding Euclidean distance between two 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: 'Tuple' object has no attribute '_eval_power'

我建議逐步執行此操作:

首先,編寫一個函數來計算兩點之間的歐幾里德距離。 我們可以通過對它們各自分量之間的距離使用畢達哥拉斯定理來做到這一點:

在此處輸入圖片說明

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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM