常见距离的度量及python实现

闵可夫斯基距离(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=1nakbkp

其中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)=

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值