numpy计算常见的距离

import numpy as np
x=np.array([1,2,3,4])
y=np.array([3,4,5,6])

一:欧氏距离

欧氏距离是基于各维度特征的绝对数值,需要保证各维度指标在相同的刻度级别,比如对身高(cm)和体重(kg)两个单位不同的指标使用欧式距离可能使结果失效。
欧式距离是使用较多的相似性的度量方法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OhxoWnCO-1681629658614)(attachment:image.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cESJ0MvT-1681629658615)(attachment:image.png)]

def euclidean(x, y):

    return np.sqrt(np.sum((x - y)**2))
print(euclidean(x, y))
4.0

二:曼哈顿距离(Manhattan distance)

象你在曼哈顿要从一个十字路口开车到另外一个十字路口,驾驶距离是两点间的直线距离吗?显然不是,除非你能穿越大楼。实际驾驶距离就是这个“曼哈顿距离”(L1范数)。而这也是曼哈顿距离名称的来源,曼哈顿距离也称为城市街区距离

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZH4q49HD-1681629658615)(attachment:image.png)]

def manhattan(x, y):

    return np.sum(np.abs(x - y))
print(manhattan(x, y))
8

切比雪夫距离

国际象棋玩过么?国王走一步能够移动到相邻的8个方格中的任意一个(如图1.11)。那么国王从格子(x1,y1)走到格子(x2,y2)最少需要多少步?自己走走试试。你会发现最少步数总是max(| x2-x1| , |y2-y1| ) 步。有一种类似的一种距离度量方法叫切比雪夫距离(L∞范数)。
如果下一个落脚点在起始点的水平位置,那么最少步数是横坐标的差值的绝对值;
如果在垂直位置,那么最少步数是纵坐标的差值的绝对值。
如果是非水平非垂直位置,大家自己试一试。试过之后会发现,还是差不过横坐标差值的绝对值,或者是纵坐标差值的绝对值。其实上面的曼哈顿距离、欧氏距离和切比雪夫距离都是明可夫斯基距离在特殊条件下的应用。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4asrnIxW-1681629658616)(attachment:image.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fUtiqNuJ-1681629658617)(attachment:image.png)]

def chebyshev(x, y):
 
    return np.max(np.abs(x - y))
print(chebyshev(x, y))
2

四:马氏距离

既然欧几里得距离无法忽略指标度量的差异,所以在使用欧氏距离之前需要对底层指标进行数据的标准化,而基于各指标维度进行标准化后再使用欧氏距离就衍生出来另外一个距离度量——马哈拉诺比斯距离(Mahalanobis Distance),简称马氏距离。

下图有两个正态分布的总体,它们的均值分别为a和b,但方差不一样,则图中的A点离哪个总体更近? 或者说A有更大的概率属于谁? 显然, A离左边的更近, A属于左边总体的概率更大, 尽管A与a的欧式距离远一些。 这就是马氏距离的直观解释。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3MktPZYl-1681629658617)(attachment:image.png)]

马氏距离是基于样本分布的一种距离。

物理意义就是在规范化的主成分空间中的欧氏距离。所谓规范化的主成分空间就是利用主成分分析对一些数据进行主成分分解。 再对所有主成分分解轴做归一化, 形成新的坐标轴。 由这些坐标轴张成的空间就是规范化的主成分空间。

定义: 有M个样本向量X1 与Xm, 协方差矩阵记为S, 均值记为向量μ, 则其中样本向量X到μ的马氏距离表示为:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vbrCuqDK-1681629658618)(attachment:image.png)]

向量 Xi与Xj 之间的马氏距离定义为:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vUTS7dMT-1681629658619)(attachment:image.png)]

若协方差矩阵是单位矩阵(各个样本向量之间独立同分布) , 则Xi 与Xj之间的马氏距离等于他们的欧氏距离(若协方差矩阵是对角矩阵, 则就是标准化欧氏距离) :

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1BZSOfZV-1681629658620)(attachment:image.png)]

若协方差矩阵是单位阵,那么右图马氏空间的样本分布就会简化为左图欧式空间的样本分布。

五:汉明距离

汉明距离一般是针对字符串,两个字符串s1与s2的汉明距离为: 将其中一个变为另外一个所需要作的最小字符替换次数。

def hamming(x, y):
 
    return np.sum(x != y) / len(x)
print(hamming(x, y))
1.0
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值