欧式距离/欧几里得度量(Euclidean Distance)

欧氏距离就是两点之间最短的直线距离
(1)二维空间里A、B两点间的欧式距离:
SAB=(xA−xB)2+(yA−yB)2S_{AB}= \sqrt{\def\bar#1{#1^2} \bar{(x_A-x_B)}+\def\bar#1{#1^2} \bar{(y_A-y_B)}} SAB​=(xA​−xB​)2+(yA​−yB​)2​
(2)推广到nnn维空间内的两点P、QP、QP、Q:
P=(x1P,x2P,...,xnP),Q=(x1Q,x2Q,...,xnQ)P=(x_1^P,x_2^P,...,x_n^P),Q=(x_1^Q,x_2^Q,...,x_n^Q) P=(x1P​,x2P​,...,xnP​),Q=(x1Q​,x2Q​,...,xnQ​)
P、QP、QP、Q点间的欧式距离:
SPQ=(x1P−x1Q)2+(x2P−x2Q)2+...+(xnP−xnQ)2S_{PQ}= \sqrt{\def\bar#1{#1^2} \bar{(x_1^P-x_1^Q)}+\def\bar#1{#1^2} \bar{(x_2^P-x_2^Q)}+...+\def\bar#1{#1^2} \bar{(x_n^P-x_n^Q)}} SPQ​=(x1P​−x1Q​)2+(x2P​−x2Q​)2+...+(xnP​−xnQ​)2​
用向量形式xP、xQ\bold{x^P}、\bold{x^Q}xP、xQ表示两个点,两点之间的距离可用L2范数表示:
SPQ=∥xP−xQ∥S_{PQ}=\|\bold{x^P}-\bold{x^Q}\| SPQ​=∥xP−xQ∥
欧式距离的计算代码:

import numpy as npx1=[1,1]
x2=[2,2]
x1_np = np.array(x1)
x2_np = np.array(x2)# 直接用公式计算
dist1 = np.sqrt(np.sum((x1_np-x2_np)**2))# 使用内置范数函数计算
dist2 = np.linalg.norm(x1_np,x2_np)print(f"d1={dist1},d2={dist2}\n")

曼哈顿距离(Manhattan Distance)

如果乘坐出租车从曼哈顿街头的A路口到B路口,行进距离必须按照路网规则进行移动,而不可能直接穿行。

所以与两点间的直线距离不同,曼哈顿距离指的是“导航距离”。可以用L1范数来表示。

(1)二维空间里A(x1,y1)、B(x2,y2)A(x_1,y_1)、B(x_2,y_2)A(x1​,y1​)、B(x2​,y2​)两点间的曼哈顿距离:
SAB=∣x1−x2∣+∣y1−y2∣S_{AB}=|x_1-x_2|+|y_1-y_2| SAB​=∣x1​−x2​∣+∣y1​−y2​∣
(2)推广到nnn维空间内的两点P、QP、QP、Q:
SPQ=∑i=1n∣xiP−xiQ∣S_{PQ}=\sum_{i=1}^n|x_i^P-x_i^Q| SPQ​=i=1∑n​∣xiP​−xiQ​∣
计算代码:

import numpy as npx1=[1,2]
x2=[5,6]
x1_np = np.array(x1)
x2_np = np.array(x2)dist3 = np.sum(np.abs(x1_np-x2_np))
print(f"d3={dist3}\n")

余弦相似度

余弦夹角一般用来测量两个样本之间的相似性。常用于图像特征向量之间的相似度比对。

数学上可以通过向量的点积计算两个向量之间的余弦夹角:
cos⁡θ=A⋅B∣A∣∣B∣=x1x2+y1y2x12+y12x22+y22\cos{\theta}=\frac{\bold{A}\sdot\bold{B}}{|\bold{A}||\bold{B}|} = \frac{x_1 x_2+y_1 y_2}{\sqrt{x_1^2+y_1^2}\sqrt{x_2^2+y_2^2}} cosθ=∣A∣∣B∣A⋅B​=x12​+y12​​x22​+y22​​x1​x2​+y1​y2​​
拓展到nnn维空间的P、QP、QP、Q向量:
cos⁡θ=xPTxQxPTxPxQTxQ\cos{\theta}=\frac{\bold{x_P}^T \bold{x_Q}}{\sqrt{\bold{x_P}^T \bold{x_P}}\sqrt{\bold{x_Q}^T \bold{x_Q}}} cosθ=xP​TxP​​xQ​TxQ​​xP​TxQ​​
计算代码:

from __future__ import division#使除法变为精确除法
import numpy as npx1=[1,2,3,4]
x2=[2,3,4,6]
x1_np = np.array(x1)
x2_np = np.array(x2)# 直接用公式计算
result1 = np.dot(x1_np,x2_np)/(np.sqrt(x1_np,x1_np)*np.dot(x2_np,x2_np))# 直接用np内置函数计算
result2 = np.dot(x1_np,x2_np)/(np.linalg.norm(x1_np)*np.linalg.norm(x2_np))# 计算夹角大小
theta = np.arccos(result1)print(f"result1={result1},result2={result2},theta={theta}\n")

欧式距离、曼哈顿距离、余弦相似度(python代码)相关推荐

  1. ML:图像数据、字符串数据等计算相似度常用的十种方法(余弦相似性、皮尔逊、闵可夫斯基距离/曼哈顿距离/欧氏距离/切比雪夫距离、马氏距离、汉明距离、编辑距离、杰卡德相似系数、相对熵/KL散度、Helli

    ML:图像数据.字符串数据等计算相似度常用的十种方法(余弦相似性.皮尔逊.闵可夫斯基距离/曼哈顿距离/欧氏距离/切比雪夫距离.马氏距离.汉明距离.编辑距离.杰卡德相似系数.相对熵/KL散度.Helli ...

  2. 相似度和相异度、常用距离度量、余弦相似度

    通常,具有若干属性的对象之间的邻近度用单个属性的邻近度的组合来定义,因此我们首先讨论具有单个属性的对象之间的邻近度.考虑由一个标称属性描述的对象,对于两个这样的对象,相似意味什么呢?由于标称属性只携带 ...

  3. 余弦相似度-C#代码实现

    余弦相似度 代码原文地址 https://blog.csdn.net/liu136313/article/details/47190231 为Java 现改为C# 方便以后使用 余弦相似度的灵感来自于 ...

  4. 皮尔逊波形相似度python代码

    皮尔逊相关系数用来衡量两个变量之间的相似程度,值越接近1,则两个变量之间的相关性越大,值越接近0,则两个变量之间的相关性越小.皮尔逊相关系数可以用来衡量两个波形之间的相似度. 在 Python 中,可 ...

  5. 曼哈顿距离,欧式距离,余弦距离

    1.曼哈顿距离 曼哈顿距离,叫出租车距离的.具见上图黄线,应该就能明白. 计算距离最简单的方法是曼哈顿距离.假设,先考虑二维情况,只有两个乐队 x 和 y,用户A的评价为(x1,y1),用户B的评价为 ...

  6. 文本相识度算法(余弦相似性、简单共有词、编辑距离、SimHash、汉明距离、Jaccard相似性系数、欧几里得距离、曼哈顿距离 )

    文本相似度计算在信息检索.数据挖掘.机器翻译.文档复制检测等领域有着广泛的应用. 比如舆论控制,我们假设你开发了一个微博网站,并且已经把世界上骂人的句子都已经收录进了数据库,那么当一个用户发微博时会先 ...

  7. 常见的几种距离量度(欧式距离、曼哈顿距离、切比雪夫距离等)

    在机器学习和数据挖掘中,我们经常需要计算样本之间的相似度,通常的做法是计算样本之间的距离.本文介绍几种常用的距离量度方法. 一.欧氏距离(Euclidean Distance) 我们从最常见的欧式距离 ...

  8. 曼哈顿距离,欧式距离,明式距离,切比雪夫距离以及马氏距离

    1.曼哈顿距离 曼哈顿距离又称Manhattan distance,还见到过更加形象的,叫出租车距离的.具体贴一张图,应该就能明白. 上图摘自维基百科,红蓝黄皆为曼哈顿距离,绿色为欧式距离. 2.欧式 ...

  9. 曼哈顿距离,欧式距离,明式距离,切比雪夫距离区别

    根据我浅薄的知识,以及粗浅的语言,随意总结一下. 1.曼哈顿距离 曼哈顿距离又称Manhattan distance,还见到过更加形象的,叫出租车距离的.具体贴一张图,应该就能明白. 上图摘自维基百科 ...

  10. 数据的距离度量 一、欧式距离,曼哈顿距离,闵氏距离,切比雪夫距离,兰氏距离,马氏距离

    数据的距离度量 一.欧式距离,曼哈顿距离,闵氏距离,切比雪夫距离,兰氏距离,马氏距离 前言 欧式距离 标准欧式距离 曼哈顿距离 闵氏距离 切比雪夫距离 兰氏距离 马氏距离 前言 本篇记录一下常用的数据 ...

最新文章

  1. 渗透测试 回显机制平台 dnslog 搭建
  2. Android开发--详解SAX解析XML文件
  3. hdu4882 水贪心
  4. GDB调试技术(二)
  5. C++ STL map集合的使用
  6. Dangling meta character '?' near index 0
  7. 爬取博主所有文章并保存到本地(.txt版)--python3.6
  8. Azure Services Bus(服务总线)中的工作流(workflow)
  9. Linux内核学习笔记一
  10. JQuery提交表单
  11. C++实现双人对战五子棋(附源码)
  12. 拓扑容差如何修改_如何在CAD中通过设置容差参数对多段线进行自动修复重构
  13. java 手机号验证_java最新手机号码正则验证方法
  14. CardView使用详解
  15. cavium CN71XX芯片 GSER Interface总结
  16. 【2022-01-11】JS逆向之拉钩登入(上)
  17. uthash官方使用说明文档
  18. python汇率转换代码_RMB汇率转换
  19. SAT阅读模拟练习题一篇
  20. Android P SELinux (四) CTS neverallow处理总结

热门文章

  1. Java中的位移运算符
  2. 更灵活的定位内存地址的方法02 - 零基础入门学习汇编语言33
  3. 入门代码教程第六节 如何:使用客户端
  4. Nginx配置HTTP2.0
  5. Vue Cli3 项目 vue.config.js 配置
  6. Nginx利用nginx_upstream_check_module检查后端健康情况
  7. Oracle ORA-27102的解决办法(out of memory)
  8. NET Core 3.0 项目中使用 AutoFac
  9. C#算法设计排序篇之10-桶排序(附带动画演示程序)
  10. php 命令行打印换行符_如何在命令行输出中打印换行符