簡體   English   中英

將歐幾里德距離加到矩陣

[英]Adding Euclidean distance to a matrix

我解釋了我必須發展的東西。

假設我必須執行一個函數,該函數負責接收兩個矩陣,它們的列數相同,但行數可以不同。

總而言之,我們將有兩個向量矩陣,它們的維數相同,但元素數N不同。

我必須計算組成兩個矩陣的每個向量之間的歐幾里得距離,然后將其存儲在另一個矩陣中,該矩陣將包含我所有向量之間的歐幾里得距離。

這是我開發的代碼:

def compute_distances(x, y):
    # Dimension:
    N, d = x.shape
    M, d_ = y.shape

    # The dimension should be the same
    if d != d_:
        print "Dimensiones de x e y no coinciden, no puedo calcular las distancias..."
        return None

    # Calculate distance with loops:
    D = np.zeros((N, M))
    i = 0
    j = 0
    for v1 in x:
       for v2 in y:
            if(j != M):
                D[i,j] = math.sqrt(sum([(xi-yi)**2 for xi,yi in zip(v1,v2)]))
            #print "[",i,",",j,"]"
                j = j + 1
            else:
                j = 0
       i = i + 1;

    print D

在這種方法中,我將接收兩個矩陣,以稍后創建一個矩陣,該矩陣將在矩陣xy的向量之間具有歐幾里得距離。

問題如下,我不知道如何向每個計算出的歐幾里得距離值分配我生成的新矩陣D的正確位置。

我的主要功能具有以下結構:

n = 1000
m = 700
d = 10

x = np.random.randn(n, d)
y = np.random.randn(m, d)

print "x shape =", x.shape
print "y shape =", y.shape

D_bucle = da.compute_distances(x, y)
D_cdist = cdist(x, y)

print np.max(np.abs(D_cdist - D_bucle))

B_cdist使用有效的方法來計算歐幾里得距離。 它必須具有與D_bucle相同的結果,該結果與D_bucle計算的D_bucle相同,但使用的代碼效率不高,但是我沒有得到應有的結果。

我認為是當我創建歐幾里得矩陣D ,它做得不正確,所以計算不正確。

更新!!! 我剛剛更新了解決方案,我的問題是,首先我不知道如何將每對向量的正確歐氏向量結果分配給D矩陣,現在我知道如何分配它,但是現在的問題是,僅從第一行開始與cdist函數相比,D Matrix的結果正確

尚未完全理解您的要求,但我確實看到一個可能解釋您結果的問題:

for v1 in x:
  for v2 in y:
    D = math.sqrt(sum([(xi-yi)**2 for xi,yi in zip(v1,v2)]))

在此循環中,每NxM次您將覆蓋D的值。 完成后,D僅包含最后一個比較的距離。 您可能需要類似D [i,j] = math.sqrt(...

暫無
暫無

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

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