簡體   English   中英

從 Python 中的集合計算歐氏距離

[英]Calculate euclidean distance from a set in Python

我有一個數組 S(i),它包含所有接近 i 的 x 坐標 j 的索引值,即如果 S(1) = {2,3} 這意味着 x2 和 x3 接近 x1。 我總共有 S(1), ..., S(N) 組。

所以這部分代碼工作正常:

arr = np.array([[1,3], [2,8],[3,1],[6,18], [9,8]]) 

arr = [item[0] for item in arr] #Extract x-coordinates

def Si(x): #This is the set i want to use
    return [[j for j in range(len(x)) if np.abs(x[j] - x[i]) < 2] for i in range(len(x))]

現在我有一個 j 的下標,我想計算 (x_i,y_i) 到 S(i) 中的每個 (x_j,y_j) 之間的歐氏距離,例如對於 i=1,如果 S(1) = {7},找到 (x_1, y_1) 和 (x_7, y_7) 之間的距離,對於 i=2,如果 S(2) = {3,9},找到 (x_2,y_2) 和 (x_3,y_3) 和 (x_2, y_2) 和 (x_9,y_9) 並為每個 i 重復。

我不知道如何實現這個,我真的很困惑,這是一個歐幾里德距離代碼,它為數組中的所有值找到它。 但不在我想要的集合中。

def euc_dist(arr):
  
    arr_x = (arr[:,0,np.newaxis].T - arr[:,0,np.newaxis])**2 ##x-coordinates
    arr_y = (arr[:,1,np.newaxis].T - arr[:,1,np.newaxis])**2 ##y-coordinates
    arr = np.sqrt(arr_x + arr_y)

    return arr

這應該工作:

S = Si(arr) # get the array
def my_fn(i): # take the value of i
    euc_dists = []
    for j in S[i]: # iterate over j's in S[i]
        if i!= j:
            dist = np.linalg.norm(arr[i]-arr[j]) # euclidean distance
            euc_dists.append(dist)
    return euc_dists

暫無
暫無

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

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