首页 > 编程语言 >常见距离计算的Python实现

常见距离计算的Python实现

时间:2023-08-02 23:34:33浏览次数:40  
标签:distance Python sum 常见 距离 scipy np array

常见的距离有曼哈顿距离、欧式距离、切比雪夫距离、闵可夫斯基距离、汉明距离、余弦距离等,用Python实现计算的方式有多种,可以直接构造公式计算,也可以利用内置线性代数函数计算,还可以利用scipy库计算。

1.曼哈顿距离

也叫城市街区距离,是两点差向量的L1范数,也就是各元素的绝对值之和。A(x1,x2,…,xn)和B(y1,y2,…,yn)之间的曼哈顿距离表示为

\[d=\sum_{i=1}^{n}{\left| x_i-y_i \right|} \]

Python实现:

import numpy as np
from scipy.spatial import distance

A = np.array([1,2,3])
B = np.array([4,5,6])

# 方式一:直接构造公式计算
dist1 = np.sum(np.abs(A-B))

# 方式二:内置线性代数函数计算
dist2 = np.linalg.norm(A-B,ord=1)  #ord为范数类型,取值1(一范数),2(二范数),np.inf(无穷范数),默认2。

# 方式三:scipy库计算
dist3 = distance.cityblock(A,B)

2.欧式距离

是一种最常见的距离,也就是两点差向量的L2范数。A(x1,x2,…,xn)和B(y1,y2,…,yn)之间的欧式距离表示为

\[d=\sqrt{\sum_{i=1}^{n}{\left( x_i-y_i \right)^{2}}} \]

Python实现:

import numpy as np
from scipy.spatial import distance

A = np.array([1,2,3])
B = np.array([4,5,6])

# 方式一:直接构造公式计算
dist1 = np.sqrt(np.sum((A-B)**2))

# 方式二:内置线性代数函数计算
dist2 = np.linalg.norm(A-B,ord=2)

# 方式三:scipy库计算
dist3 = distance.euclidean(A,B)

3.切比雪夫距离

最大的维度内距离,是两点差向量的无穷范数。A(x1,x2,…,xn)和B(y1,y2,…,yn)之间的切比雪夫距离表示为

\[d=max\left( \left| x_i-y_i \right| \right) \]

Python实现:

import numpy as np
from scipy.spatial import distance

A = np.array([1,2,3])
B = np.array([4,5,6])

# 方式一:直接构造公式计算
dist1 = np.max(np.abs(A-B))

# 方式二:内置线性代数函数计算
dist2 = np.linalg.norm(A-B,ord=np.inf)

# 方式三:scipy库计算
dist3 = distance.chebyshev(A,B)

4. 闵可夫斯基距离

是一种范式距离的统称,可表示为两点差向量的Lp范数。A(x1,x2,…,xn)和B(y1,y2,…,yn)之间的闵可夫斯基距离表示为

\[d=\sqrt[p]{\sum_{i=1}^{n}{\left| x_i-y_i \right|^{p}}} \]

Python实现:

import numpy as np
from scipy.spatial import distance

A = np.array([1,2,3])
B = np.array([4,5,6])

# 方式一:内置线性代数函数计算
dist1 = np.linalg.norm(A-B,ord=3)  # np.linalg.norm(A-B,ord=p)

# 方式二:scipy库计算
dist2 = distance.minkowski(A,B,3)  # distance.minkowski(A,B,p)

5.汉明距离

衡量两个字符串之间的差异程度,对两个对象的向量元素逐个比较,差异的个数占总个数的比例。A(x1,x2,…,xn)和B(y1,y2,…,yn)之间的汉明距离表示为

\[d=\frac{1}{n}\sum_{i=1}^{n}{I\left( x_i\ne y_i \right)} \]

其中I为指示函数,

\[\begin{equation} I= \left\{ \begin{array}{lr} 1 \quad if\left( x_i\ne y_i \right)&\\ 0 \quad if\left( x_i = y_i\right) \end{array} \right. \end{equation} \]

Python实现:

import numpy as np
from scipy.spatial import distance

A = np.array([1,2,3])
B = np.array([4,5,6])

# 方式一:scipy库计算
dist1 = distance.hamming(A,B)

6.余弦距离

也叫余弦相似度,是两点空间向量夹角的余弦值,是内积与模积的比值,用来衡量两向量间的差异程度。A(x1,x2,…,xn)和B(y1,y2,…,yn)之间的余弦距离表示为

\[\begin{align} d&=cos\theta=\frac{<A,B>}{\left| A \right|\cdot\left| B \right|} \\ &=\frac{\sum_{i=1}^{n}{x_iy_i}}{\sqrt{\sum_{i=1}^{n}{x_i^{2}}}\cdot\sqrt{\sum_{i=1}^{n}{y_i^{2}}}} \end{align}\]

Python实现:

import numpy as np
from scipy.spatial import distance

A = np.array([1,2,3])
B = np.array([4,5,6])

# 方式一:直接构造公式计算
dist1 = np.sum(A*B)/(np.sqrt(np.sum(A**2))*np.sqrt(np.sum(B**2)))

# 方式二:scipy库计算
dist2 = 1-distance.cosine(A,B)

End.

标签:distance,Python,sum,常见,距离,scipy,np,array
From: https://www.cnblogs.com/flyup/p/17602107.html

相关文章

  • 《流畅的Python第二版》读书笔记——文本和字节序列
    引言这是《流畅的Python第二版》抢先版的读书笔记。Python版本暂时用的是python3.8。为了使开发更简单、快捷,本文使用了JupyterLab。Python3明确区分了人类可读的字符串和原始的字节序列。新内容简介新增了对emoji表示字符的描述。字符问题字符串是个简单的概念:一个字符串是一个字......
  • 使用python进行贝叶斯统计分析|附代码数据
    原文链接:http://tecdat.cn/?p=7637最近我们被客户要求撰写关于贝叶斯统计的研究报告,包括一些图形和统计输出。本文讲解了使用PyMC3进行基本的贝叶斯统计分析过程. ( 点击文末“阅读原文”获取完整代码数据******** )。  #Importsimportpymc3aspm#python的概率......
  • 贝叶斯网络python实战(以泰坦尼克号数据集为例,pgmpy库)
    贝叶斯网络python实战(以泰坦尼克号数据集为例,pgmpy库)leida_wt 2019-03-2423:05:36  16815  收藏 140分类专栏: 机器学习 文章标签: pgmpy 贝叶斯网络 泰坦尼克 机器学习 图网络版权 文章目录贝叶斯网络简介贝叶斯推断思路贝叶斯网络贝叶斯网络的实现应用步骤泰坦尼克......
  • Python教程(6)——Python变量的基础类型。|整数类型|浮点数类型|字符串类型|布尔类型|
    学习编程语言,不得不忽视变量这个概念。Python中的变量是用于存储数据的名称,你可以将值赋给变量,并在程序的其他地方使用该变量来引用该值。变量在程序中起到存储和操作数据的作用。如果学过C/C++语言的同学,定义了变量后,需要加个类型的限制,比如intage=28doublemoney=10.2......
  • 高效Python-2-1 剖析(Profiling 性能分析)
    2从内置功能中获取最高性能本章包括剖析代码以发现速度和内存瓶颈更有效地利用现有的Python数据结构了解Python分配典型数据结构的内存成本使用懒编程技术处理大量数据有很多工具和库可以帮助我们编写更高效的Python。但是,在我们深入研究提高性能的所有外部选项之前,让我......
  • 反射机制--python
    引用:https://www.cnblogs.com/vipchenwei/p/6991209.htmlhttps://www.cnblogs.com/vipchenwei/p/6991209.html 1.反射是什么:反射就是通过字符串的形式,导入模块;通过字符串的形式,去模块寻找指定函数,并执行。利用字符串的形式去对象(模块)中操作(查找/获取/删除/添加)......
  • python-glob查找特定文件
    python-glob查找特定文件目录python-glob查找特定文件只用到三个匹配符glob.globglob.iglob案例当前路径下所有py文件当前路径文件tmp下py文件glob模块可以查找当前脚本目录(相对路径)下或者某一指定目录(绝对路径)符合特定规则的文件路径名glob文件名模式匹配,不用遍历整个目录判......
  • python-sys模块
    python-sys模块目录python-sys模块sys.versionsys.argvsys.platformsys.modulessys.path参考资料"sys"即"system","系统"。该模块提供了一些接口,用于访问Python解释器自身使用和维护的变量,不是主机操作系统。sys.argv #获取命令行参数列表,第一个元素是程序本身sys.ex......
  • Python基础day57 Django模板继承和模型层
    模板之标签就是在模板里面使用流程控制:if、else、elseif、for标签看起来是这样的:{%tag%}for标签{%forpersoninperson_list%}{{forloop}}<p>{{person.name}}</p>{%endfor%}{%forpersoninperson_list%}{#判断list是否有值,没有就走empty#}......
  • 【python_3】PyCharm开发工具的安装和基础使用!
    前言Python程序的开发有许多种方式,一般常见的:python解释器环境内,执行单行代码;使用python解释器程序,执行python代码文件;使用第三方IDE(集成开发工具),如PyCharm软件,开发python程序;1.下载pycharm官网:https://www.jetbrains.com/2.安装点击next:点击next:点击next:点击next:点击Install......