Numpy中計算各種距離

2021-09-11 11:34:46 字數 4182 閱讀 7986

詳細:

1.閔可夫斯基距離(minkowski distance)

2.歐氏距離(euclidean distance)

3.曼哈頓距離(manhattan distance)

4.切比雪夫距離(chebyshev distance)

5.夾角余弦(cosine)

6.漢明距離(hamming distance)

7.傑卡德相似係數(jaccard similarity coefficient)

8.貝葉斯公式

(1)閔氏距離的定義:

兩個n維變數a(x11,x12,…,x1n)與 b(x21,x22,…,x2n)間的閔可夫斯基距離定義為:

其中p是乙個變引數。

當p=1時,就是曼哈頓距離

當p=2時,就是歐氏距離

當p→∞時,就是切比雪夫距離

根據變引數的不同,閔氏距離可以表示一類的距離。

連線:np.linalg.norm #是適合使用這個公式

2.歐氏距離(euclidean distance)

歐氏距離(l2範數)是最易於理解的一種距離計算方法,源自歐氏空間中兩點間的距離公式(如圖1.9)。

(4) python實現歐式距離公式的:

vector1 = np.array([1,2,3])

vector2 = np.array([4,5,6])

op1=np.sqrt(np.sum(np.square(vector1-vector2)))

op2=np.linalg.norm(vector1-vector2)

print(op1)

print(op2)

#輸出:

#5.19615242271

#5.19615242271

3.曼哈頓距離(manhattan distance)

從名字就可以猜出這種距離的計算方法了。想象你在曼哈頓要從乙個十字路口開車到另外乙個十字路口,駕駛距離是兩點間的直線距離嗎?顯然不是,除非你能穿越大樓。實際駕駛距離就是這個「曼哈頓距離」(l1範數)。而這也是曼哈頓距離名稱的**,曼哈頓距離也稱為城市街區距離(city block distance)(如圖1.10)。

(3)python實現曼哈頓距離:

vector1 = np.array([1,2,3])

vector2 = np.array([4,5,6])

op3=np.sum(np.abs(vector1-vector2))

op4=np.linalg.norm(vector1-vector2,ord=1)

#輸出#9

#9.0

4.切比雪夫距離(chebyshev distance)

西洋棋玩過麼?國王走一步能夠移動到相鄰的8個方格中的任意乙個(如圖1.11)。那麼國王從格仔(x1,y1)走到格仔(x2,y2)最少需要多少步?自己走走試試。你會發現最少步數總是max(| x2-x1| , |y2-y1| ) 步。有一種類似的一種距離度量方法叫切比雪夫距離(l∞範數)。

(3) python實現切比雪夫距離:

vector1 = np.array([1,2,3])

vector2 = np.array([4,7,5])

op5=np.abs(vector1-vector2).max()

op6=np.linalg.norm(vector1-vector2,ord=np.inf)

print(op5)

print(op6)

#輸出:

#5#5.0

5. 夾角余弦(cosine)

幾何中夾角余弦可用來衡量兩個向量方向的差異,機器學習中借用這一概念來衡量樣本向量之間的差異(如圖1.12)。

(1)在二維空間中向量a(x1,y1)與向量b(x2,y2)的夾角余弦公式:

(2) 兩個n維樣本點a (x11,x12,…,x1n)與 b(x21,x22,…,x2n)的夾角余弦

類似的,對於兩個n維樣本點a(x11,x12,…,x1n)與 b(x21,x22,…,x2n),可以使用類似於夾角余弦的概念來衡量它們間的相似程度。

夾角余弦取值範圍為[-1,1]。夾角余弦越大表示兩個向量的夾角越小,夾角余弦越小表示兩向量的夾角越大。當兩個向量的方向重合時夾角余弦取最大值1,當兩個向量的方向完全相反夾角余弦取最小值-1。

(3)python實現夾角余弦

vector1 = np.array([1,2,3])

vector2 = np.array([4,7,5])

op7=np.dot(vector1,vector2)/(np.linalg.norm(vector1)*(np.linalg.norm(vector2)))

print(op7)

#輸出#0.929669680201

6. 漢明距離(hamming distance)

(1)漢明距離的定義

兩個等長字串s1與s2之間的漢明距離定義為將其中乙個變為另外乙個所需要作的最小替換次數。例如字串「1111」與「1001」之間的漢明距離為2。

應用:資訊編碼(為了增強容錯性,應使得編碼間的最小漢明距離盡可能大)。

(2) python實現漢明距離:

v1=np.array([1,1,0,1,0,1,0,0,1])

v2=np.array([0,1,1,0,0,0,1,1,1])

smstr=np.nonzero(v1-v2)

print(smstr) # 不為0 的元素的下標

sm= np.shape(smstr[0])[0] 

print( sm )

#輸出#(array([0, 2, 3, 5, 6, 7]),)

#67. 傑卡德相似係數(jaccard similarity coefficient)

(1) 傑卡德相似係數

兩個集合a和b的交集元素在a,b的並集中所佔的比例,稱為兩個集合的傑卡德相似係數,用符號j(a,b)表示。

(2) 傑卡德距離

與傑卡德相似係數相反的概念是傑卡德距離(jaccard distance)。傑卡德距離可用如下公式表示:

傑卡德距離用兩個集合中不同元素佔所有元素的比例來衡量兩個集合的區分度。

(3) 傑卡德相似係數與傑卡德距離的應用

可將傑卡德相似係數用在衡量樣本的相似度上。

樣本a與樣本b是兩個n維向量,而且所有維度的取值都是0或1。例如:a(0111)和b(1011)。我們將樣本看成是乙個集合,1表示集合包含該元素,0表示集合不包含該元素。

p:樣本a與b都是1的維度的個數

q:樣本a是1,樣本b是0的維度的個數

r:樣本a是0,樣本b是1的維度的個數

s:樣本a與b都是0的維度的個數

那麼樣本a與b的傑卡德相似係數可以表示為:

這裡p+q+r可理解為a與b的並集的元素個數,而p是a與b的交集的元素個數。

而樣本a與b的傑卡德距離表示為:

(4) python實現傑卡德距離:

import scipy.spatial.distance as dist

v1=np.array([1,1,0,1,0,1,0,0,1])

v2=np.array([0,1,1,0,0,0,1,1,1])

matv=np.array([v1,v2])

print(matv)

ds=dist.pdist(matv,'jaccard')

print(ds)

#輸出#[[1 1 0 1 0 1 0 0 1] [0 1 1 0 0 0 1 1 1]]

# [ 0.75]

8. 經典貝葉斯公式

原: p(ab)=p(a | b)·p(b)=p(b | a)·p(a)

本例,我們不去研究黃色的蘋果與黃色的梨有什麼差別。而承認其統計規律:蘋果是紅色的概率是0.8,蘋果是黃色的概率就是1-0.8=0.2,而梨是黃色的概率是0.9,將其作為先驗概率。有了這個先驗概率,就可以利用抽樣,即任取乙個水果,前提是抽樣對總體的概率分布沒有影響,通過它的某個特徵來劃分其所屬的類別。黃色是蘋果和梨共有的特徵,因此,既有可能是蘋果也有可能是梨,概率計算的意義在於得到這個水果更有可能的那一種。

條件: 10個蘋果10個梨子

用數學的語言來表達,就是已知:

# p(蘋果)=10/(10+10),p(梨)=10/(10+10),p(黃色|蘋果)=20%,p(黃色|梨)=90%,p(黃色)=  20% * 0.5 + 90% * 0.5  = 55%

求p(梨|黃色):

# = p(黃色|梨)p(梨)/p(黃色)

# = 81.8%

numpy計算路線距離

參考文獻 enumerate遍歷陣列 np.diff函式 numpy適用陣列作為索引 x xn x n,y n import numpy as np 適用二維陣列表示地圖上的六個點 city position.shape 6,2 表示旅行商經過的路線 city position np.array 1...

python 計算向量歐氏距離 numpy

給定兩個向量,計算歐式距離 直接呼叫numpy中的幾個函式就行了 這種東西,絕對不要自己寫,哈哈 涉及到怎麼將list轉化為numpy的array python view plain copy defcaleuclideandistance vec1,vec2 dist numpy.sqrt num...

用numpy高效計算歐氏距離

在各類演算法中,距離的計算極其常見,用numpy來計算效率非常的高,其計算方式也有很多。個人認為最直觀也非常高效的一種方式如下 首先看二維歐式距離的公式定義d 那麼就依據公式的定義,我們直觀的來設定計算公式,廢話不多說直接見 import numpy as np a np.arange 16 res...