簡體   English   中英

最小歐氏距離

[英]Minimum Euclidean Distance

我有兩個數據框(附圖)。 對於表 1 中給定的每一行 -

第 1 部分- 我需要在表 2 中找到給出最小歐幾里得距離的行。 輸出 1 是預期的答案。

第 2 部分- 我需要在表 2 中找到給出最小歐幾里得距離的行。 輸出 2 是預期的答案。 這里唯一的區別是表 2 中的一行不能被選擇兩次。

我嘗試使用此代碼來獲取距離,但不確定如何添加其他字段 -

import numpy as np
from scipy.spatial import distance

s1 = np.array([(2,2), (3,0), (4,1)])
s2 = np.array([(1,3), (2,2),(3,0),(0,1)])
print(distance.cdist(s1,s2).min(axis=1))

兩個數據幀和預期輸出:

截圖

代碼現在給出了所需的輸出,並且有一個注釋掉的打印語句用於額外的輸出。

它對不同的列表長度也很靈活。

歸功於如何使用 NumPy 計算歐幾里得距離?

希望能幫助到你:

from numpy import linalg as LA

list1 = [(2,2), (3,0), (4,1)]
list2 = [(1,3), (2,2),(3,0),(0,1)]

names = range(0, len(list1) + len(list2))
names = [chr(ord('`') + number + 1) for number in names]

i = -1
j = len(list1) #Start Table2 names
for tup1 in list1:
    collector = {} #Let's collect values for each minimum check
    j = len(list1)
    i += 1
    name1 = names[i]
    for tup2 in list2:
        name2 = names[j]
        a = numpy.array(tup1)
        b = numpy.array(tup2)
#        print ("{} | {} -->".format(name1, name2), tup1, tup2, "   ", numpy.around(LA.norm(a - b), 2))
        j += 1
        collector["{} | {}".format(name1, name2)] = numpy.around(LA.norm(a - b), 2)
        if j == len(names):
            min_key = min(collector, key=collector.get)
            print (min_key, "-->" , collector[min_key])

輸出:

a | e --> 0.0
b | f --> 0.0
c | f --> 1.41

暫無
暫無

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

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