常見距離公式 numpy 實現

2021-09-19 22:00:02 字數 1752 閱讀 8489

在使用 keras 或者使用 tf 做深度學習時,通常有些內容需要計算距離來作為判定相似程度的依據,如下列舉一些常見的距離公式:

def minkowski_distance(vec1, vec2, p=3):

"""閔氏距離

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

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

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

:param vec1:

:param vec2:

:param p:

:return:

"""# return sum([(x - y) ** p for (x, y) in zip(vec1, vec2)]) ** (1 / p)

return np.linalg.norm(vec1 - vec2, ord=p)

def cosine_distance(vec1, vec2):

"""夾角余弦

:param vec1:

:param vec2:

:return:

"""vec1_norm = np.linalg.norm(vec1)

vec2_norm = np.linalg.norm(vec2)

return vec1.dot(vec2) / (vec1_norm * vec2_norm)

def euclidean_distance(vec1, vec2):

"""歐氏距離

:param vec1:

:param vec2:

:return:

"""# return np.sqrt(np.sum(np.square(vec1 - vec2)))

# return sum([(x - y) ** 2 for (x, y) in zip(vec1, vec2)]) ** 0.5

return np.linalg.norm(vec1 - vec2, ord=2)

def manhattan_distance(vec1, vec2):

"""曼哈頓距離

:param vec1:

:param vec2:

:return:

"""# return np.sum(np.abs(vec1 - vec1))

return np.linalg.norm(vec1 - vec2, ord=1)

def chebyshev_distance(vec1, vec2):

"""切比雪夫距離

:param vec1:

:param vec2:

:return:

"""# return np.abs(vec1 - vec2).max()

return np.linalg.norm(vec1 - vec2, ord=np.inf)

def hamming_distance(vec1, vec2):

"""漢明距離

:param vec1:

:param vec2:

:return:

"""return np.shape(np.nonzero(vec1 - vec2)[0])[0]

def jaccard_similarity_coefficient(vec1, vec2):

"""傑卡德距離

:param vec1:

:param vec2:

:return:

"""return dist.pdist(np.array([vec1, vec2]), 'jaccard')

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...

numpy 常見函式

返回乙個元組tuple,包含a中所有不為零元素的索引 例子 一維陣列a a np.array 0 2,3 c np.nonzero a print np.array c ndim 2print np.array c 1 2 print c array 1,2 二維陣列a x np.array 3,0...

Numpy中計算各種距離

詳細 1.閔可夫斯基距離 minkowski distance 2.歐氏距離 euclidean distance 3.曼哈頓距離 manhattan distance 4.切比雪夫距離 chebyshev distance 5.夾角余弦 cosine 6.漢明距離 hamming distance...