在使用 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...