簡體   English   中英

“常態”是否等同於“歐幾里德距離”?

[英]Is “norm” equivalent to “Euclidean distance”?

我不確定“規范”和“歐幾里德距離”是否意味着同樣的事情。 請你幫我解決這個問題。

我有一個nm陣列a ,其中m > 3.我想計算第二個數據點a[1,:]與所有其他點(包括其自身)之間的Eculidean距離。 所以我使用了np.linalg.norm ,它輸出了兩個給定點的范數。 但我不知道這是否是獲得ED的正確方法。

import numpy as np

a = np.array([[0, 0, 0 ,0 ], [1, 1 , 1, 1],[2,2, 2, 3], [3,5, 1, 5]])
N = a.shape[0] # number of row
pos = a[1,:] # pick out the second data point. 
dist = np.zeros((N,1), dtype=np.float64)

for i in range(N):
    dist[i]= np.linalg.norm(a[i,:] - pos)

范數是一個函數,它將矢量作為輸入並返回一個標量值,該標量值可以解釋為該矢量的“大小”,“長度”或“幅度”。 更正式地,規范被定義為具有以下數學屬性:

  • 它們是乘法縮放的,即任何標量a的 Norm(a· v )= | a |·Norm( v
  • 它們滿足三角不等式,即Norm( u + v )≤Norm( u )+ Norm( v
  • 一個向量的范數是零,如果且僅當它是零矢量,即規范(V)= 0⇔V = 0

歐幾里德范數(也稱為L²范數)只是眾多不同規范中的一種 - 也有最大范數,曼哈頓范數等。單個矢量的L²范數相當於從該點到原點的歐幾里德距離。 ,兩個向量之差的L²范數等於兩個點之間的歐幾里德距離。


正如@nobar的回答所說, np.linalg.norm(x - y, ord=2) (或者只是np.linalg.norm(x - y) )將給出向量xy之間的歐幾里德距離。

既然你要計算的歐幾里得距離之間的a[1, :]和所有其他行的a ,你可以這樣做快了很多通過消除for環路和廣播在的行a

dist = np.linalg.norm(a[1:2] - a, axis=1)

使用廣播自己計算歐幾里德距離也很容易:

dist = np.sqrt(((a[1:2] - a) ** 2).sum(1))

最快的方法可能是scipy.spatial.distance.cdist

from scipy.spatial.distance import cdist

dist = cdist(a[1:2], a)[0]

(1000,1000)數組的某些時序:

a = np.random.randn(1000, 1000)

%timeit np.linalg.norm(a[1:2] - a, axis=1)
# 100 loops, best of 3: 5.43 ms per loop

%timeit np.sqrt(((a[1:2] - a) ** 2).sum(1))
# 100 loops, best of 3: 5.5 ms per loop

%timeit cdist(a[1:2], a)[0]
# 1000 loops, best of 3: 1.38 ms per loop

# check that all 3 methods return the same result
d1 = np.linalg.norm(a[1:2] - a, axis=1)
d2 = np.sqrt(((a[1:2] - a) ** 2).sum(1))
d3 = cdist(a[1:2], a)[0]

assert np.allclose(d1, d2) and np.allclose(d1, d3)

“規范”的概念是數學中的一般概念,當應用於向量(或向量差異)時,廣泛地表示一些長度的度量。 計算范數有各種不同的方法,但是稱為歐幾里德距離的方法稱為“2范數”,並且基於應用2的指數(“平方”),並且在求和后應用1/2的指數(“平方根”)。


它在文檔中有點神秘,但是通過設置參數ord=2可以得到兩個向量之間的歐幾里德距離。

sum(abs(x)**ord)**(1./ord)

變為sqrt(sum(x**2))

注意:正如@Holt所指出的,默認值是ord=None ,它被記錄為計算向量的“2-norm”。 因此,這相當於ord=2 (歐幾里德距離)。

暫無
暫無

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

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