原文:https://blog.csdn.net/qq_19707521/article/details/78479532

Python Numpy计算各类距离

详细:

1.闵可夫斯基距离(Minkowski Distance)

2.欧氏距离(Euclidean Distance)

3.曼哈顿距离(Manhattan Distance)

4.切比雪夫距离(Chebyshev Distance)

5.夹角余弦(Cosine)

6.汉明距离(Hamming distance)

7.杰卡德相似系数(Jaccard similarity coefficient)

8.贝叶斯公式

(1)闵氏距离的定义:

两个n维变量A(x11,x12,…,x1n)与 B(x21,x22,…,x2n)间的闵可夫斯基距离定义为:

其中p是一个变参数。

当p=1时,就是曼哈顿距离

当p=2时,就是欧氏距离

当p→∞时,就是切比雪夫距离

根据变参数的不同,闵氏距离可以表示一类的距离。

连接:

np.linalg.norm #是适合使用这个公式

2.欧氏距离(Euclidean Distance)

欧氏距离(L2范数)是最易于理解的一种距离计算方法,源自欧氏空间中两点间的距离公式(如图1.9)。

(4) python实现欧式距离公式的:

 
  1. vector1 = np.array([1,2,3])

  2. vector2 = np.array([4,5,6])

  3. op1=np.sqrt(np.sum(np.square(vector1-vector2)))

  4. op2=np.linalg.norm(vector1-vector2)

  5. print(op1)

  6. print(op2)

  7. #输出:

  8. #5.19615242271

  9. #5.19615242271

3.曼哈顿距离(Manhattan Distance)

从名字就可以猜出这种距离的计算方法了。想象你在曼哈顿要从一个十字路口开车到另外一个十字路口,驾驶距离是两点间的直线距离吗?显然不是,除非你能穿越大楼。实际驾驶距离就是这个“曼哈顿距离”(L1范数)。而这也是曼哈顿距离名称的来源,曼哈顿距离也称为城市街区距离(City Block distance)(如图1.10)。

(3)python实现曼哈顿距离:

 
  1. vector1 = np.array([1,2,3])

  2. vector2 = np.array([4,5,6])

  3. op3=np.sum(np.abs(vector1-vector2))

  4. op4=np.linalg.norm(vector1-vector2,ord=1)

  5. #输出

  6. #9

  7. #9.0

4.切比雪夫距离(Chebyshev Distance)

国际象棋玩过么?国王走一步能够移动到相邻的8个方格中的任意一个(如图1.11)。那么国王从格子(x1,y1)走到格子(x2,y2)最少需要多少步?自己走走试试。你会发现最少步数总是max(| x2-x1| , |y2-y1| ) 步。有一种类似的一种距离度量方法叫切比雪夫距离(L∞范数)。

(3) Python实现切比雪夫距离:

 
  1. vector1 = np.array([1,2,3])

  2. vector2 = np.array([4,7,5])

  3. op5=np.abs(vector1-vector2).max()

  4. op6=np.linalg.norm(vector1-vector2,ord=np.inf)

  5. print(op5)

  6. print(op6)

  7. #输出:

  8. #5

  9. #5.0

5. 夹角余弦(Cosine)

几何中夹角余弦可用来衡量两个向量方向的差异,机器学习中借用这一概念来衡量样本向量之间的差异(如图1.12)。

(1)在二维空间中向量A(x1,y1)与向量B(x2,y2)的夹角余弦公式:

(2) 两个n维样本点A (x11,x12,…,x1n)与 B(x21,x22,…,x2n)的夹角余弦
类似的,对于两个n维样本点A(x11,x12,…,x1n)与 B(x21,x22,…,x2n),可以使用类似于夹角余弦的概念来衡量它们间的相似程度。

夹角余弦取值范围为[-1,1]。夹角余弦越大表示两个向量的夹角越小,夹角余弦越小表示两向量的夹角越大。当两个向量的方向重合时夹角余弦取最大值1,当两个向量的方向完全相反夹角余弦取最小值-1。

(3)python实现夹角余弦

 
  1. vector1 = np.array([1,2,3])

  2. vector2 = np.array([4,7,5])

  3. op7=np.dot(vector1,vector2)/(np.linalg.norm(vector1)*(np.linalg.norm(vector2)))

  4. print(op7)

  5. #输出

  6. #0.929669680201

6. 汉明距离(Hamming distance)

(1)汉明距离的定义

两个等长字符串s1与s2之间的汉明距离定义为将其中一个变为另外一个所需要作的最小替换次数。例如字符串“1111”与“1001”之间的汉明距离为2。

应用:信息编码(为了增强容错性,应使得编码间的最小汉明距离尽可能大)。

(2) python实现汉明距离:

 
  1. v1=np.array([1,1,0,1,0,1,0,0,1])

  2. v2=np.array([0,1,1,0,0,0,1,1,1])

  3. smstr=np.nonzero(v1-v2)

  4. print(smstr) # 不为0 的元素的下标

  5. sm= np.shape(smstr[0])[0]

  6. print( sm )

  7. #输出

  8. #(array([0, 2, 3, 5, 6, 7]),)

  9. #6

7. 杰卡德相似系数(Jaccard similarity coefficient)

(1) 杰卡德相似系数

两个集合A和B的交集元素在A,B的并集中所占的比例,称为两个集合的杰卡德相似系数,用符号J(A,B)表示。

(2) 杰卡德距离

与杰卡德相似系数相反的概念是杰卡德距离(Jaccard distance)。杰卡德距离可用如下公式表示:

杰卡德距离用两个集合中不同元素占所有元素的比例来衡量两个集合的区分度。

(3) 杰卡德相似系数与杰卡德距离的应用

可将杰卡德相似系数用在衡量样本的相似度上。

样本A与样本B是两个n维向量,而且所有维度的取值都是0或1。例如:A(0111)和B(1011)。我们将样本看成是一个集合,1表示集合包含该元素,0表示集合不包含该元素。

P:样本A与B都是1的维度的个数

q:样本A是1,样本B是0的维度的个数

r:样本A是0,样本B是1的维度的个数

s:样本A与B都是0的维度的个数

那么样本A与B的杰卡德相似系数可以表示为:

这里p+q+r可理解为A与B的并集的元素个数,而p是A与B的交集的元素个数。

而样本A与B的杰卡德距离表示为:

(4) Python实现杰卡德距离:

 
  1. import scipy.spatial.distance as dist

  2. v1=np.array([1,1,0,1,0,1,0,0,1])

  3. v2=np.array([0,1,1,0,0,0,1,1,1])

  4. matv=np.array([v1,v2])

  5. print(matv)

  6. ds=dist.pdist(matv,'jaccard')

  7. print(ds)

  8. #输出

  9. #[[1 1 0 1 0 1 0 0 1] [0 1 1 0 0 0 1 1 1]]

  10. # [ 0.75]

8. 经典贝叶斯公式

原: P(AB)=P(A | B)·P(B)=P(B | A)·P(A)

本例,我们不去研究黄色的苹果与黄色的梨有什么差别。而承认其统计规律:苹果是红色的概率是0.8,苹果是黄色的概率就是1-0.8=0.2,而梨是黄色的概率是0.9,将其作为先验概率。有了这个先验概率,就可以利用抽样,即任取一个水果,前提是抽样对总体的概率分布没有影响,通过它的某个特征来划分其所属的类别。黄色是苹果和梨共有的特征,因此,既有可能是苹果也有可能是梨,概率计算的意义在于得到这个水果更有可能的那一种。

条件: 10个苹果10个梨子

用数学的语言来表达,就是已知:

# P(苹果)=10/(10+10),P(梨)=10/(10+10),P(黄色|苹果)=20%,P(黄色|梨)=90%,P(黄色)=  20% * 0.5 + 90% * 0.5  = 55%

求P(梨|黄色):

 
  1. # = P(黄色|梨)P(梨)/P(黄色)

Python 计算各类距离相关推荐

  1. python公式计算_Python Numpy计算各类距离的方法

    详细: 1.闵可夫斯基距离(Minkowski Distance) 2.欧氏距离(Euclidean Distance) 3.曼哈顿距离(Manhattan Distance) 4.切比雪夫距离(Ch ...

  2. python公式计算两点距离并输出_Python Numpy计算各类距离的方法

    详细: 1.闵可夫斯基距离(Minkowski Distance) 2.欧氏距离(Euclidean Distance) 3.曼哈顿距离(Manhattan Distance) 4.切比雪夫距离(Ch ...

  3. python程序设计请计算从公元1年1月_使用Python计算今天距离公元1年1月1日的天数...

    最近,在做一个项目时,要求计算当天距离公元1年1月1日的天数(含公元1年1月1日),耗费了我将近半个小时时间.梳理一下思路,以备不时之需. 计算天数Python实现 距离公元1年1月1日的天数?要一天 ...

  4. python计算余弦距离_在Python中计算余弦距离的优化方法

    如果可以使用SciPy,可以使用spatial.distance中的余弦值: 如果您不能使用SciPy,您可以尝试通过重写Python来获得一个小的加速(编辑:但是没有像我以前想像的那样工作,见下文) ...

  5. 用Python计算现在距离春节还剩多长时间

    首先,你需要导入 Python 中的 datetime 模块.然后,你可以使用 datetime.datetime.now() 函数来获取当前的日期和时间.你还可以使用 datetime.date(y ...

  6. Python计算经济距离权重矩阵

    前情回顾:空间权重矩阵 一年前的博客介绍了基本权重矩阵的定义,今天在其基础上分享Python构建的方式 目录 一.经济权重矩阵定义 二.数据准备 三.全部代码 一.经济权重矩阵定义 当然,这里YiY_ ...

  7. Python计算自由下落距离

    一球从M米高度自由下落,每次落地后返回原高度的一半,再落下. 它在第N次落地时反弹多高?共经过多少米? 保留两位小数 m,n=map(int,input().split()) sum_number=m ...

  8. 计算欧式距离和余弦相似度

    本文介绍Python计算欧式距离和余弦相似度.为了余弦相似度需要使用欧式距离,我们首先介绍欧式距离. 欧式距离 欧式距离标识两个向量之间的距离,计算公式如下: 欧式距离 = Σ(Ai−Bi)2\sqr ...

  9. python 各类距离公式实现

    所列的距离公式列表和代码如下: 闵可夫斯基距离(Minkowski Distance) 欧氏距离(Euclidean Distance) 曼哈顿距离(Manhattan Distance) 切比雪夫距 ...

最新文章

  1. mysql error104528000_腾讯云服务器CentOS安装JDK+Tomcat+MySQL详细步骤(以及遇到的各种坑)...
  2. 搭建 Visual Studio 和 Freeglut、GLEW的OpenGL环境
  3. 面向对象的程序设计之原型模式
  4. 阿里云服务器购买该如何选择?阿里云服务器购买步骤流程介绍...
  5. 恩智浦智能车大赛2020_内蒙古科技大学第九届智能车大赛校内公开赛总决赛
  6. python+OpenCV图像处理(十二)车牌定位中对图像的形态学组合操作处理
  7. TCP拥塞控制和TCP流量控制
  8. vue.js学习02之vue-cli脚手架创建项目环境搭建
  9. Visio图片转为eps格式
  10. html站点地图怎么做,如何制作网站地图,制作网站地图的步骤
  11. Eviews回归结果解读
  12. vs code 突然不能粘贴和复制
  13. 成为JAVA架构师必看书籍推荐
  14. 鲜枣课堂之深入浅出数字信号处理
  15. 使用三丰云服务器建立moon节点搭建zerotier
  16. PC端QQ用某个账号登陆未响应情况解决
  17. 02#EXCEL函数【基础】
  18. 软件测试缺陷表怎样描述,作为软件测试人员,如何描述缺陷(Defect)?
  19. Scrum立会报告+燃尽图(Beta阶段第二周第六次)
  20. 4412运行java_Tiny4412 Android 启动流程

热门文章

  1. Linux Kernel Namespace实现: namespace API介绍
  2. celery mysql flask_如何在Flask中创建Celery实例?
  3. 个人的关于c++运算符重载的总结
  4. php 随机生成数据表名,php 随机生成姓名
  5. mysql update join 锁表_Mysql事务中Update是否会锁表?
  6. java oracle exp_java中使用oracle的exp/imp导出、导入数据
  7. php本地安装帝国视频,帝国cms如何播放视频
  8. 新一代生产力工具:FlowUs
  9. 成为优秀程序员需要具备的15种编程技巧
  10. 皮一皮:这不叫分手...叫裁员...