计算两个数字向量u和v之间的距离函数

1,欧氏距离(Euclidean distance)

在数学中,欧几里得距离或欧几里得度量是欧几里得空间中两点间“普通”(即直线)距离。使用这个距离,欧氏空间成为度量空间。计算公式为

二维空间中的欧氏距离:

三维空间中的欧式距离:

n维空间中的欧式距离:

x = [1, 0, 0]
y = [0, 1, 0]
dis = distance.euclidean(x, y)

2,曼哈顿距离(Manhattan/cityblock distance)

曼哈顿距离(Manhattan Distance)用以标明两个点在标准坐标系上的绝对轴距总和。曼哈顿距离的命名原因是从规划为方型建筑区块的城市(如曼哈顿)间,最短的行车路径而来(忽略曼哈顿的单向车道以及只存在于3、14大道的斜向车道)。任何往东三区块、往北六区块的的路径一定最少要走九区块,没有其他捷径。计算公式为:

如下图所示,红色表示曼哈顿距离,蓝色和黄色代表等价的曼哈顿距离。

x = [5, 3, 9]
y = [0, 1, 6]
dis = distance.cityblock(x, y)

3,坎贝拉距离(Canberra distance)

Canberra 距离是用来衡量两个向量空间的居间,是Manhattan 距离的加权版本,Canberra 距离已被用作比较排名列表和计算机安全中的入侵检测的测量。

x = [1, 2, 0]
y = [0, 1, 0]
dis = distance.canberra(x, y)

4,切比雪夫距离(Chebyshev distance)

切比雪夫距离(Chebyshev distance)是向量空间中的一种度量,二个点之间的距离定义是其各坐标数值差绝对值的最大值。以数学的观点来看,切比雪夫距离是由一致范数(uniform norm)(或称为上确界范数)所衍生的度量,也是超凸度量(injective metric space)的一种。计算公式为

x = [5, 3, 9]
y = [0, 1, 6]
dis = distance.chebyshev(x, y)

5,相关系数距离(Correlation distance)

相关系数距离是1与相关系数的差,相关系数的定义为

常见的Pearson相关性系数即为

Pearson相关距离为

x = [5, 3, 9]
y = [0, 1, 6]
dis = distance.correlation(x, y)

6,余弦相似度距离(Cosine distance)

余弦相似性通过测量两个向量的夹角的余弦值来度量它们之间的相似性。0度角的余弦值是1,而其他任何角度的余弦值都不大于1;并且其最小值是-1。从而两个向量之间的角度的余弦值确定两个向量是否大致指向相同的方向。两个向量有相同的指向时,余弦相似度的值为1;两个向量夹角为90°时,余弦相似度的值为0;两个向量指向完全相反的方向时,余弦相似度的值为-1。这结果是与向量的长度无关的,仅仅与向量的指向方向相关。余弦相似度通常用于正空间,因此给出的值为0到1之间。

余弦相似度定义来自于欧几里得点积,点积定义如下

余弦相似度为:

余弦相似度距离为1与余弦相似度的差

x = [5, 3, 9]
y = [0, 1, 6]
dis = distance.cosine(x, y)

8,闵可夫斯基距离(Minkowski distance)

闵氏距离不是一种距离,而是一组距离的定义,将以下形式的距离都定义为Minkowski distance。

 或 

当  时,就是曼哈顿距离 当  时,就是欧氏距离 当  时,就是切比雪夫距离

x = [2, 0, 0]
y = [0, 1, 0]
dis = distance.minkowski(x, y, 2)

9,标准欧式距离(standardized Euclidean distance)

标准化欧氏距离是针对简单欧氏距离的缺点(量纲差异)而作的一种改进方案,标准化方法为

变换后标准欧式距离为

x = [1, 0, 0]
y = [0, 1, 0]
s = [0.1, 0.1, 0.1]
dis = distance.seuclidean(x, y, s)

10,平方欧式距离(squared Euclidean distance)

平方欧式距离是简单欧式距离每一项的平方,公式如下

x = [1, 0, 0]
y = [0, 1, 0]
dis = distance.sqeuclidean(x, y)

11,加权闵可夫斯基距离(Minkowski distance)

x = [1, 0, 0]
y = [0, 1, 0]
dis = distance.wminkowski(x, y, 2, np.ones(3))

12,Bray-Curtis 相异度

Bray-Curtis 相异度(Bray-Curtis dissimilarity)是生态学中用来衡量不同样地物种组成差异的测度,计算公式为:

x = [1, 2, 0]
y = [0, 1, 0]
dis = distance.braycurtis(x, y)

参考文档:

scipy.spatial.distance

机器学习常用距离的定义和计算

Scipy 学习第3篇:数字向量的距离计算的更多相关文章

  1. 【Python学习】指定两点地理位置经纬度的距离计算

    指定两点地理位置经纬度的距离计算 #coding=utf-8 from math import * # input Lat_A 纬度A # input Lng_A 经度A # input Lat_B ...

  2. 一步步学习javascript基础篇(3):Object、Function等引用类型

    我们在<一步步学习javascript基础篇(1):基本概念>中简单的介绍了五种基本数据类型Undefined.Null.Boolean.Number和String.今天我们主要介绍下复杂 ...

  3. Python3学习(1)-基础篇

    Python3学习(1)-基础篇 Python3学习(2)-中级篇 Python3学习(3)-高级篇 安装(MAC) 直接运行: brew install python3 输入:python3 --v ...

  4. 学习KnockOut第二篇之Counter

                                                                        学习KnockOut第二篇之Counter        欲看此 ...

  5. PHP学习笔记 - 进阶篇(11)

    PHP学习笔记 - 进阶篇(11) 数据库操作 PHP支持哪些数据库 PHP通过安装相应的扩展来实现数据库操作,现代应用程序的设计离不开数据库的应用,当前主流的数据库有MsSQL,MySQL,Syba ...

  6. PHP学习笔记 - 进阶篇(10)

    PHP学习笔记 - 进阶篇(10) 异常处理 抛出一个异常 从PHP5开始,PHP支持异常处理,异常处理是面向对象一个重要特性,PHP代码中的异常通过throw抛出,异常抛出之后,后面的代码将不会再被 ...

  7. PHP学习笔记 - 进阶篇(8)

    PHP学习笔记 - 进阶篇(8) 日期与时间 取得当前的Unix时间戳 UNIX 时间戳(英文叫做:timestamp)是 PHP 中关于时间与日期的一个很重要的概念,它表示从 1970年1月1日 0 ...

  8. PHP学习笔记 - 进阶篇(4)

    PHP学习笔记 - 进阶篇(4) 字符串操作 字符串介绍 PHP开发中,我们遇到最多的可能就是字符串. 字符串变量用于包含字符串的值. 一个字符串 通过下面的3种方法来定义: 1.单引号 2.双引号 ...

  9. PHP学习笔记 - 进阶篇(5)

    PHP学习笔记 - 进阶篇(5) 正则表达式 什么叫正则表达式 正则表达式是对字符串进行操作的一种逻辑公式,就是用一些特定的字符组合成一个规则字符串,称之为正则匹配模式. $p = '/apple/' ...

随机推荐

  1. GZip 压缩解压 工具类 [ GZipUtil ]

    片段 1 片段 2 pom.xml <dependency> <groupId>commons-codec</groupId> <artifactId> ...

  2. 时间轮算法在Netty和Kafka中的应用,为什么不用Timer、延时线程池?

    大家好,我是yes. 最近看 Kafka 看到了时间轮算法,记得以前看 Netty 也看到过这玩意,没太过关注.今天就来看看时间轮到底是什么东西. 为什么要用时间轮算法来实现延迟操作? 延时操作 Ja ...

  3. Hibernate4.3 HQL查询

    HQL:Hibernate专属语言,可以跨数据库 一.基本查询 1 public void testQuery(){ 2 Session session = HibernateUtils.getSes ...

  4. Nuget管理自己的项目库

    Nuget是什么 Nuget 是一种 Visual Studio 扩展工具,它能够简化在 Visual Studio 项目中添加.更新和删除库(部署为程序包)的操作.(官方地址)相信大家对这个应该还是 ...

  5. c++ 中预编译头文件名 pch.h

    转载:https://www.it-swarm.asia/zh/c++/%e6%88%91%e5%8f%af%e4%bb%a5%e4%bd%bf%e7%94%a8includepchh%e2%80%9 ...

  6. 如何使用微软提供的TCHAR.H头文件?

    转载:https://www.cnblogs.com/flyingspark/archive/2012/03/16/2399788.html 如何使用微软提供的TCHAR.H头文件? 如果你现在写的代 ...

  7. CString类常用方法----Left(),Mid(),Right()

    参考:https://blog.csdn.net/Qingqinglanghua/article/details/4992624 CString Left( int nCount ) const;   ...

  8. I2C的库函数应用示例

    I2C  Arduino 简单应用举例   例1  多机通信 主机代码:(从编译器串口监视器发送数字1,2,3,4来控制从机的LED亮与灭) 1 #include <Wire.h> 2 v ...

  9. NET Standard中配置TargetFrameworks输出多版本类库

    系列目录     [已更新最新开发文章,点击查看详细] 在.NET Standard/.NET Core技术出现之前,编写一个类库项目(暂且称为基础通用类库PA)且需要支持不同 .NET Framew ...

  10. 最新最最最简单的Axure傻瓜式破解版教程(带下载地址)

    Axure 破解版下载 下载地址在文章末尾 Axure是什么? Axure RP是一款专业的快速原型设计工具.Axure(发音:Ack-sure),代表美国Axure公司:RP则是Rapid Prot ...