目录
闵可夫斯基距离(Minkowski Distance)
Minkowski Distance不是一种距离,而是一组距离。两个n维变量A(a1,a2,…,an)与B(b1,b2,…,bn)间的闵可夫斯基距离定义为:
d i s t = ∑ k = 1 n ∣ a k − b k ∣ p p dist = \sqrt[p]{\sum_{k=1}^{n}|a_k-b_k|^p} dist=pk=1∑n∣ak−bk∣p
其中p是一个变参数,
当p=1时,就是曼哈顿距离
当p=2时,就是欧氏距离
当p→∞时,就是切比雪夫距离
def minkowski_distance(vec1, vec2, p=3):
"""
:param vec1:
:param vec2:
:param p:
:return:
"""
return np.linalg.norm(vec1 - vec2, ord=p)
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)
堪培拉距离(Canberra Distance)
Canberra Distance(堪培拉距离)被用来衡量向量空间中两个点之间的距离,它是曼哈顿距离的加权版本。
d i s t ( p , q ) = ∑ k = 1 n ∣ a k − b k ∣ ∣ a k ∣ + ∣ b k ∣ dist(p,q)=\sum_{k=1}^{n} \frac{|a_k - b_k|}{|a_k|+|b_k|} dist(p,q)=