详细:

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)。

python实现欧式距离公式的:

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

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

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

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

print(op1)

print(op2)

#输出:

#5.19615242271

#5.19615242271

3.曼哈顿距离(Manhattan Distance)

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

python实现曼哈顿距离:

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

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

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

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

#输出

#9

#9.0

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

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

Python实现切比雪夫距离:

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

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

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

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

print(op5)

print(op6)

#输出:

#5

#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。

python实现夹角余弦

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

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

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

print(op7)

#输出

#0.929669680201

6. 汉明距离(Hamming distance)

(1)汉明距离的定义

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

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

(2) python实现汉明距离:

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

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

smstr=np.nonzero(v1-v2)

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

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

print( sm )

#输出

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

#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的杰卡德距离表示为:

Python实现杰卡德距离:

import scipy.spatial.distance as dist

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

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

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

print(matv)

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

print(ds)

#输出

#[[1 1 0 1 0 1 0 0 1] [0 1 1 0 0 0 1 1 1]]

# [ 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(梨|黄色):

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

# = 81.8%

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

本文标题: Python Numpy计算各类距离的方法

本文地址: http://www.cppcns.com/jiaoben/python/264709.html

python公式计算_Python Numpy计算各类距离的方法相关推荐

  1. php经纬度之间的距离计算公式,golang与php实现计算两个经纬度之间距离的方法

    本文实例讲述了golang与php实现计算两个经纬度之间距离的方法.分享给大家供大家参考,具体如下: golang版本: package main import ( "fmt" & ...

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

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

  3. python多项式运算_python – 用于计算“多项式系数”的numpy / scipy函数

    是否有任何python函数(可能来自numpy或scipy)计算扩展中x ** r的系数(1 xx ** 2 x ** 3 - x **(k-1))** n ,其中k> = 1,n> = ...

  4. python莱布尼茨法计算π_python圆周率计算(带进度条)

    3.波尔文四次迭代式 这个公式由乔纳森·波尔文和彼得·波尔文于1985年发表的. bailey-borwein-plouffe算法 这个公式简称BBP公式,由David Bailey, Peter B ...

  5. c python 内存冲突_Python在计算内存时应该注意的问题?

    我之前的一篇文章,带大家揭晓了 Python 在给内置对象分配内存时的 5 个奇怪而有趣的小秘密.文中使用了sys.getsizeof()来计算内存,但是用这个方法计算时,可能会出现意料不到的问题. ...

  6. python图片相似度计算_python Opencv计算图像相似度过程解析

    这篇文章主要介绍了python Opencv计算图像相似度过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.相关概念 一般我们人区分谁是谁 ...

  7. python npv 计算公式_Python numpy 中常用的数据运算

    Numpy 精通面向数组编程和思维方式是成为Python科学计算大牛的一大关键步骤.--<利用Python进行数据分析> Numpy(Numerical Python)是Python科学计 ...

  8. python dicom 测量_python对DICOM图像的读取方法详解

    DICOM介绍 DICOM3.0图像,由医学影像设备产生标准医学影像图像,DICOM被广泛应用于放射医疗,心血管成像以及放射诊疗诊断设备(X射线,CT,核磁共振,超声等),并且在眼科和牙科等其它医学领 ...

  9. python打印日历_python输出指定月份日历的方法

    python输出指定月份日历的方法 本文实例讲述了python输出指定月份日历的方法.分享给大家供大家参考.具体实现方法如下: #!/usr/bin/python import calendar ca ...

最新文章

  1. 005-OSI七层模型IP地址
  2. 解决iptables和vsftpd设置的问题
  3. uboot学习之三-----uboot启动第一阶段--start.S之一
  4. ajax 参数大小限制,Ajax中的POST数据大小是否有限制?
  5. 减少C++编译时间的方法
  6. Asp.Net ajax 面向对象类型系统2 - 使用事件
  7. ASP.NET跨平台实践:无需安装Mono的Jexus“独立版”
  8. 计算机算法知识总结,移动笔试知识点之--计算机类-数据结构与算法知识点总结.pdf...
  9. 二叉树题目----6 二叉树的最近公共祖先 AND 二叉树搜索树转换成排序双向链表
  10. Ajax--让网站与时俱进
  11. SpringBoot 中使用 @Valid 注解 + Exception 全局处理器优雅处理参数验证
  12. 前端菜鸟是这样入门学习的,点进来!
  13. Mybatis Plus 的BaseMapper 和 Model有什么用
  14. Jupyter Notebook——如何显示目录的导航栏(安装 Jupyter Notebook extension)
  15. Netty高性能之道
  16. pycharm添加conda虚拟环境
  17. 阶段3 2.Spring_03.Spring的 IOC 和 DI_6 spring中bean的细节之三种创建Bean对象的方式
  18. 硬盘分区之MBR讲解
  19. python excel图表 导出word模板_使用python将Excel数据填充Word模板并生成Word
  20. html自动写对联,html中的对联代码

热门文章

  1. pointnet语义分割_训练并预测自己的数据
  2. Scrapy框架整合英雄缩略图(APP)
  3. 锁相环 matlab 噪声,锁相环(PLL)系统的噪声特性
  4. 数据集分享 | IWR1642呼吸心跳数据集
  5. 网站存储服务器搭建,如何部署一个最基本的数据存储服务器
  6. 攻防演练第四年的一些碎碎念
  7. 读源码(四)—— js Promise
  8. SDRAM中数据掩码DQM的作用
  9. 微信开发服务器地址url怎么写,微信开发(一)URL配置
  10. 微信小程序:map地图自动缩放自适应大小