常见距离计算的Python实现
常见的距离有曼哈顿距离、欧式距离、切比雪夫距离、闵可夫斯基距离、汉明距离、余弦距离等,用Python实现计算的方式有多种,可以直接构造公式计算,也可以利用内置线性代数函数计算,还可以利用scipy库计算。
1.曼哈顿距离
也叫城市街区距离,是两点差向量的L1范数,也就是各元素的绝对值之和。A(x1,x2,…,xn)和B(y1,y2,…,yn)之间的曼哈顿距离表示为
\]
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)之间的欧式距离表示为
\]
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)之间的切比雪夫距离表示为
\]
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)之间的闵可夫斯基距离表示为
\]
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)之间的汉明距离表示为
\]
其中I为指示函数,
\]
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)之间的余弦距离表示为
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.
常见距离计算的Python实现的更多相关文章
- [转] MachingLearning中的距离相似性计算以及python实现
参考:https://blog.csdn.net/gamer_gyt/article/details/75165842#t16 https://blog.csdn.net/ymlgrss/artic ...
- 【Python学习】指定两点地理位置经纬度的距离计算
指定两点地理位置经纬度的距离计算 #coding=utf-8 from math import * # input Lat_A 纬度A # input Lng_A 经度A # input Lat_B ...
- 相似度与距离计算python代码实现
#定义几种距离计算函数 #更高效的方式为把得分向量化之后使用scipy中定义的distance方法 from math import sqrt def euclidean_dis(rating1, r ...
- Python地理位置信息库geopy的使用(二):根据中心点坐标,方向,距离计算坐标
上一篇文章我们介绍了geopy的基本使用,这一篇文章我们根据中心点坐标,方向,距中心点距离计算出对应的坐标点,这种用法官网并没有给出详细的文档,我们这里做一下说明 生成坐标点的具体方法 import ...
- 概率分布之间的距离度量以及python实现(四)
1.f 散度(f-divergence) KL-divergence 的坏处在于它是无界的.事实上KL-divergence 属于更广泛的 f-divergence 中的一种. 如果P和Q被定义成空间 ...
- Scipy教程 - 距离计算库scipy.spatial.distance
http://blog.csdn.net/pipisorry/article/details/48814183 在scipy.spatial中最重要的模块应该就是距离计算模块distance了. fr ...
- 距离度量以及python实现(一)
1. 欧氏距离(Euclidean Distance) 欧氏距离是最易于理解的一种距离计算方法,源自欧氏空间中两点间的距离公式. (1)二维平面上两点a(x1,y1)与b(x2,y2)间 ...
- 概率分布之间的距离度量以及python实现
1. 欧氏距离(Euclidean Distance) 欧氏距离是最易于理解的一种距离计算方法,源自欧氏空间中两点间的距离公式.(1)二维平面上两点a(x1,y1)与b(x2,y2)间的欧 ...
- Anaconda 用于科学计算的 Python 发行版
用于科学计算的 Python 发行版: 1.Anaconda https://www.continuum.io/ 公司continuum. 有商业版本. Anaconda is the le ...
- 多目标遗传算法 ------ NSGA-II (部分源码解析) 拥挤距离计算 crowddist.c
/* Crowding distance computation routines */ # include <stdio.h> # include <stdlib.h> # ...
随机推荐
- 深度解读《深度探索C++对象模型》之C++虚函数实现分析(一)
接下来我将持续更新"深度解读<深度探索C++对象模型>"系列,敬请期待,欢迎关注!也可以关注公众号:iShare爱分享,自动获得推文和全部的文章列表. 假如有这样的一段 ...
- Spring Boot 微服务性能下降九成!使用 Arthas 定位根因
简介: 接收到公司业务部门的开发反馈,应用在升级公司内部框架后,UAT(预生产)环境接口性能压测不达标. 背景 接收到公司业务部门的开发反馈,应用在升级公司内部框架后,UAT(预生产)环境接口性能压测 ...
- [Trading] 如何应对股价下跌, 投资技巧
如果你想利用股价下跌的机会,你可以做以下事情来潜在地赚取利润. 为什么股价下跌会吓到投资者 商品在低价时,我们都倾向于买入,对于股票,价格暴跌以投资的形式损失你的钱,令人产生卖出情绪. 然而在卖掉之前 ...
- [Go] golang-migrate/migrate 快速使用指南
1. CLI 用途的安装 [文档] [确保] CLI 工具使用 go 命令安装时,不应该在 go.mod 所在的目录中执行命令,也就是先进入到其它非项目目录内. $ go get -tags 'pos ...
- [Go] Viper 加载项目配置,go build 打包配置文件进二进制
Viper 的传统用法局部,加载到某个 package 下的全局变量后,其它 package 可以继续使用. var Conf *viper.Viper func init() { // File n ...
- 如何参与 .NET 的开发和设计
现在 dotnet 属于 dotnet 基金会,所有开发者都可以向 dotnet 贡献代码和参与 .NET 的设计,参与路线决策.本文来告诉大家一些基本玩法,带着小伙伴们入坑 注意哦,参与 dotne ...
- SpringBoot实现WebSocket发送接收消息 + Vue实现SocketJs接收发送消息
SpringBoot实现WebSocket发送接收消息 + Vue实现SocketJs接收发送消息 参考: 1.https://www.mchweb.net/index.php/dev/887.htm ...
- .NET CORE 完美支持AOT 的 ORM SqlSugar 教程
1.AOT适合产场 Aot适合工具类型的项目使用,优点禁止反编 ,第一次启动快,业务型项目或者反射多的项目不适合用AOT AOT更新记录: 实实在在经过实践的AOT ORM 5.1.4.117 +支持 ...
- oracle RDBMS Kernel Executable 占用内存过高
oracle RDBMS Kernel Executable 占用内存过高 参考:https://www.cnblogs.com/markkang/archive/2019/11/25/1192540 ...
- 如何在局域网内两台电脑上进行webapi的在线调试
原文地址:https://www.zhaimaojun.top/Note/5475298(我自己的博客) 局域网内WebApi的远程调试方法: 第一步:管理员方式运行Vs并打开需要运行的项目,如果已经 ...