常见的距离有曼哈顿距离、欧式距离、切比雪夫距离、闵可夫斯基距离、汉明距离、余弦距离等,用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.

常见距离计算的Python实现的更多相关文章

  1. [转] MachingLearning中的距离相似性计算以及python实现

    参考:https://blog.csdn.net/gamer_gyt/article/details/75165842#t16  https://blog.csdn.net/ymlgrss/artic ...

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

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

  3. 相似度与距离计算python代码实现

    #定义几种距离计算函数 #更高效的方式为把得分向量化之后使用scipy中定义的distance方法 from math import sqrt def euclidean_dis(rating1, r ...

  4. Python地理位置信息库geopy的使用(二):根据中心点坐标,方向,距离计算坐标

    上一篇文章我们介绍了geopy的基本使用,这一篇文章我们根据中心点坐标,方向,距中心点距离计算出对应的坐标点,这种用法官网并没有给出详细的文档,我们这里做一下说明 生成坐标点的具体方法 import ...

  5. 概率分布之间的距离度量以及python实现(四)

    1.f 散度(f-divergence) KL-divergence 的坏处在于它是无界的.事实上KL-divergence 属于更广泛的 f-divergence 中的一种. 如果P和Q被定义成空间 ...

  6. Scipy教程 - 距离计算库scipy.spatial.distance

    http://blog.csdn.net/pipisorry/article/details/48814183 在scipy.spatial中最重要的模块应该就是距离计算模块distance了. fr ...

  7. 距离度量以及python实现(一)

    1. 欧氏距离(Euclidean Distance)        欧氏距离是最易于理解的一种距离计算方法,源自欧氏空间中两点间的距离公式. (1)二维平面上两点a(x1,y1)与b(x2,y2)间 ...

  8. 概率分布之间的距离度量以及python实现

    1. 欧氏距离(Euclidean Distance)       欧氏距离是最易于理解的一种距离计算方法,源自欧氏空间中两点间的距离公式.(1)二维平面上两点a(x1,y1)与b(x2,y2)间的欧 ...

  9. Anaconda 用于科学计算的 Python 发行版

    用于科学计算的 Python 发行版: 1.Anaconda  https://www.continuum.io/    公司continuum.  有商业版本. Anaconda is the le ...

  10. 多目标遗传算法 ------ NSGA-II (部分源码解析) 拥挤距离计算 crowddist.c

    /* Crowding distance computation routines */ # include <stdio.h> # include <stdlib.h> # ...

随机推荐

  1. python实现快排算法,传统快排算法,数据结构

    def quick_sort(lists,i,j): if i >= j: return list pivot = lists[i] low = i high = j while i < ...

  2. 力扣566(java)-重塑矩阵(简单)

    题目: 在 MATLAB 中,有一个非常有用的函数 reshape ,它可以将一个 m x n 矩阵重塑为另一个大小不同(r x c)的新矩阵,但保留其原始数据. 给你一个由二维数组 mat 表示的  ...

  3. 为 Serverless Devs 插上 Terraform 的翅膀,实现企业级多环境部署(下)

    简介: 在上篇中,主要介绍了 Serverless Devs 多环境功能的使用,用户读完可能会些疑问,本文会就一些常见问题进行下回答. 在上篇中,主要介绍了 Serverless Devs 多环境功能 ...

  4. 飞天大数据产品价值解读— SaaS模式云数据仓库MaxCompute

    飞天大数据产品价值解读 - SaaS模式云数据仓库 MaxCompute摘要:企业在数字化转型过程中面临数据技术平台建设和运营的诸多挑战,随着现代化数据仓库向多功能.服务化方向发展演进,技术侧的变革为 ...

  5. 大数据时代下,App数据隐私安全你真的了解么?

    ​简介:你是否有过这样的经历:你和朋友聊天表达你近期想要购买某件商品,第二天当你打开某购物软件时,平台向你推送的商品正是你想要购买的:或者,你是否接到过陌生来电,他们准确的报出了你的名字和年龄.... ...

  6. 为什么Spring仍然会是云原生时代最佳平台之一?

    简介: 基于Java语言的Spring生态,还能否适应新的开发方式,比如Cloud Native.Serverless.Faas等,它还会是云原生时代的最佳平台的选择吗?本文将从5个角度来为你分析一下 ...

  7. 2019-8-31-C#-大端小端转换

    title author date CreateTime categories C# 大端小端转换 lindexi 2019-08-31 16:55:58 +0800 2018-05-28 10:21 ...

  8. 八、Dataphin

    Dataphin是阿里巴巴集团OneData数据治理方法论内部实践的云化输出,一站式提供数据采.建.管.用全生命周期的大数据能力,以助力企业显著提升数据治理水平,构建质量可靠.消费便捷.生产安全经济的 ...

  9. 小伙伴说VuePress太简洁了,还有没有其他博客推荐?

    写在前面 自从上一篇文章发出来之后,不少小伙伴开始用VuePress搭建自己的个人网站. 如果小伙伴也想用VuePress零代码零成本搭建个人网站,可以看过来 传送门 怎么零代码零成本搭建个人网站 当 ...

  10. jfarme

    import java.awt.Color;import java.awt.Container; import javax.swing.JFrame;import javax.swing.JLabel ...