常见距离计算的Python实现

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

1.曼哈顿距离

也叫城市街区距离,是两点差向量的L1范数,也就是各元素的绝对值之和。A(x1,x2,…,xn)和B(y1,y2,…,yn)之间的曼哈顿距离表示为
d = ∑ i = 1 n ∣ x i − y i ∣ d=\sum_{i=1}^{n}{\left| x_i-y_i \right|} d=i=1nxiyi

Python实现:

import numpy as np
from scipy.spatial import distanceA = 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 = ∑ i = 1 n ( x i − y i ) 2 d=\sqrt{\sum_{i=1}^{n}{\left( x_i-y_i \right)^{2}}} d=i=1n(xiyi)2

Python实现:

import numpy as np
from scipy.spatial import distanceA = 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 = m a x ( ∣ x i − y i ∣ ) d=max\left( \left| x_i-y_i \right| \right) d=max(xiyi)
Python实现:

import numpy as np
from scipy.spatial import distanceA = 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 = ∑ i = 1 n ∣ x i − y i ∣ p p d=\sqrt[p]{\sum_{i=1}^{n}{\left| x_i-y_i \right|^{p}}} d=pi=1nxiyip
Python实现:

import numpy as np
from scipy.spatial import distanceA = 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 = 1 n ∑ i = 1 n I ( x i ≠ y i ) d=\frac{1}{n}\sum_{i=1}^{n}{I\left( x_i\ne y_i \right)} d=n1i=1nI(xi=yi)
其中I为指示函数,
I = { 1 i f ( x i ≠ y i ) 0 i f ( x i = y 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} I={1if(xi=yi)0if(xi=yi)
Python实现:

import numpy as np
from scipy.spatial import distanceA = 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 = c o s θ = < A , B > ∣ A ∣ ⋅ ∣ B ∣ = ∑ i = 1 n x i y i ∑ i = 1 n x i 2 ⋅ ∑ i = 1 n y i 2 \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} d=cosθ=AB<A,B>=i=1nxi2 i=1nyi2 i=1nxiyi
Python实现:

import numpy as np
from scipy.spatial import distanceA = 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.


参考:
https://blog.csdn.net/lemonbit/article/details/129053257

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/20571.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java关键词组匹配算法

首先我们将对代码进行基础构思&#xff1a; 一、 创建TrieNode 类 Trie 树的节点类&#xff0c;用于构建 Trie 树。TrieNode 类有以下成员变量&#xff1a; children&#xff1a;一个 Map&#xff0c;用于存储当前节点的子节点&#xff0c;key 是字符&#xff0c;value 是对应…

剑指 Offer 53 - I. !!在排序数组中查找数字 I (考查二分法)

剑指 Offer 53 - I. 在排序数组中查找数字 I 统计一个数字在排序数组中出现的次数。 示例 1: 输入: nums [5,7,7,8,8,10], target 8 输出: 2 示例 2: 输入: nums [5,7,7,8,8,10], target 6 输出: 0 提示&#xff1a; 0 < nums.length < 105 -109 < nums[i] &l…

day49-Todo List(待办事项列表)

50 天学习 50 个项目 - HTMLCSS and JavaScript day49-Todo List&#xff08;待办事项列表&#xff09; 效果 index.html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" co…

Ajax_02学习笔记(源码 + 图书管理业务 + 以及 个人信息修改功能)

Ajax_02 01_Bootstrap框架-控制弹框的使用 代码 <!-- 引入bootstrap.css --> <link href"https://cdn.jsdelivr.net/npm/bootstrap5.2.2/dist/css/bootstrap.min.css" rel"stylesheet"><button type"button" class"btn btn…

nlohmann::json 中文乱码解决方案

// UTF8字符串转成GBK字符串 std::string U2G(const std::string& utf8) {int nwLen MultiByteToWideChar(CP_UTF8, 0, utf8.c_str(), -1, NULL, 0);wchar_t* pwBuf new wchar_t[nwLen 1];//加1用于截断字符串 memset(pwBuf, 0, nwLen * 2 2);MultiByteToWideChar(CP_U…

hadoop 3.1.3集群搭建 ubuntu20

相关 hyper-v安装ubuntu-20-server hyper-v建立快照 hyper-v快速创建虚拟机-导入导出虚拟机 准备 虚拟机设置 采用hyper-v方式安装ubuntu-20虚拟机和koolshare hostnameiph01192.168.66.20h02192.168.66.21h03192.168.66.22 静态IP 所有机器都需要按需设置 sudo vim /e…

C语言技巧 ----------调试----------程序员必备技能

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; &#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382;…

【css】nth-child选择器实现表格的斑马纹效果

nth-child() 选择器可以实现为所有偶数&#xff08;或奇数&#xff09;的表格行添加css样式&#xff0c;even&#xff1a;偶数&#xff0c;odd&#xff1a;奇数。 代码&#xff1a; <style> table {border-collapse: collapse;width: 100%; }th, td {text-align: cente…

MySQL 判断字段是否包含数字或者纯数字

使用mysql原生函数FIND_IN_SET查询包含某个数字 select * from text where find_in_set(1,name) 使用regexp正则匹配纯数字 select * from text where (name REGEXP [^0-9.])0; 当 REGEXP ‘[^0-9.]’ 结果为 0 ,代表为纯数字 当 REGEXP ‘[^0-9.]’ 结果为1 ,代表不为纯数…

kube-state-metrics暴露k8s中的监控指标

kube-state-metrics 是一个用于从 Kubernetes 集群中生成各种资源对象状态指标的工具。 通过Deployment等配置完成安装 https://github.com/kubernetes/kube-state-metrics/tree/main/examples/standard 根据官方给定的配置添加至k8s上 注意需要RBAC授权 启动项 要使 kube…

在C语言中内嵌汇编语言

在C语言中内嵌的汇编指令包含大部分的ARM和Thumb指令&#xff0c;不过其使用与汇编文件中的指令有些不同&#xff0c;存在一些限制&#xff0c;主要有以下几个方面&#xff1a; &#xff08;1&#xff09;不能直接向PC寄存器赋值&#xff0c;程序跳转要使用B或者BL指令&#x…

Promise用法

学习了promise之后&#xff0c;有点懂但让我说又说不出来&#xff0c;参考别人的记录一下。 1.什么是promise&#xff1f; 2.promise解决了什么问题 3.es6 promise语法 &#xff08;1&#xff09;then链式操作语法 &#xff08;2&#xff09;catch的语法 &#xff08;3&#xf…

Git Bash 教程!【不是所有人都会用Git】

我不太会用github...... 写这篇文章希望能顺利...... 【写在前面】介绍一下git bash的复制粘贴的快捷键&#xff0c;以防后续不会&#xff1a; 开始&#xff1a; 首先下一个windows&#xff1a;git for windows(地址&#xff1a;Git - Downloading Package (git-scm.com)) &a…

P3957 [NOIP2017 普及组] 跳房子

[NOIP2017 普及组] 跳房子 题目背景 NOIP2017 普及组 T4 题目描述 跳房子&#xff0c;也叫跳飞机&#xff0c;是一种世界性的儿童游戏&#xff0c;也是中国民间传统的体育游戏之一。 跳房子的游戏规则如下&#xff1a; 在地面上确定一个起点&#xff0c;然后在起点右侧画…

基于遗传算法的试题组卷(二)

实例讲解 一、准备工作 1、问题实体 问题实体包含编号、类型&#xff08;类型即题型&#xff0c;分为五种&#xff1a;单选&#xff0c;多选&#xff0c;判断&#xff0c;填空&#xff0c;问答&#xff0c; 分别用1、2、3、4、5表示&#xff09;、分数、难度系数、知识点。一…

【MySQL】触发器 (十二)

🚗MySQL学习第十二站~ 🚩本文已收录至专栏:MySQL通关路 ❤️文末附全文思维导图,感谢各位点赞收藏支持~ 一.引入 触发器是与表有关的数据库对象,作用在insert/update/delete语句执行之前(BEFORE)或之后(AFTER),自动触发并执行触发器中定义的SQL语句集合。它可以协助应…

解决Win11右键菜单问题

✅作者简介&#xff1a;大家好&#xff0c;我是Cisyam&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Cisyam-Shark的博客 &#x1f49e;当前专栏&#xff1a; 程序日常 ✨特色专栏&…

【MyBatis】 框架原理

目录 10.3【MyBatis】 框架原理 10.3.1 【MyBatis】 整体架构 10.3.2 【MyBatis】 运行原理 10.4 【MyBatis】 核心组件的生命周期 10.4.1 SqlSessionFactoryBuilder 10.4.2 SqlSessionFactory 10.4.3 SqlSession 10.4.4 Mapper Instances 与 Hibernate 框架相比&#…

【HAL库】STM32CubeMX开发----STM32F407----LAN8720A----移植FreeModbus实现ModbusTCP

前言 本次实验以 STM32F407VET6 芯片为MCU&#xff0c;使用 25MHz 外部时钟源。 以太网PHY层芯片为 LAN8720A&#xff0c;移植FreeModbus实现ModbusTCP网口通信。 具体内容参考文章&#xff1a;【HAL库】STM32CubeMX开发----STM32F407----ETHLAN8720ALWIP----ping通 本次移植…

零基础强化学习入门分享

&#xff08;一&#xff09;前言&#xff1a;强化学习入门顺序。 以前主要学习硬件PCB单片机等知识&#xff0c;后来接触的项目也大多与电气相关&#xff0c;从一窍不通到稍微找到点门道&#xff0c;中间走过不少弯路&#xff0c;误打误撞中&#xff0c;也留下了一些经验。 我的…