计算两个向量间的欧氏距离_用Numpy实现常见距离度量
设
和
为两个向量,求它们之间的距离。
这里用Numpy实现,设
和
为
ndarray <numpy.ndarray>,它们的shape都是 (N,)
为所求的距离,是个浮点数(
float)。
import numpy as np
1.欧氏距离(Euclidean distance)
d_{Euclid}(x,y) = \sqrt{\sum_{i=1}^{n} (x_i - y_i)^2} (亦称为欧氏距离),是计算两个维度空间中真实间距的标准方法,在此也被视为常见的向量模长计算方式。它不仅适用于二维与三维的空间结构,在更高维度的空间中依然保持着其作为基本几何测量工具的核心地位
def euclidean(x, y):
return np.sqrt(np.sum((x - y)**2))
2.曼哈顿距离(Manhattan distance)
设想你处在纽约市曼哈顿区的一个交叉路口,并希望前往另一个交叉路口。行驶路线是否为两点之间的直线路径?显然并非如此——除非你能够穿越大楼(即穿过建筑之间的空间)。实际上,在这种情况下行驶的距离即为此处所指的“曼哈顿距离”。这一名称正是由此而来,“曼哈顿距离”亦被称为城市街区距离(City Block distance)。
def manhattan(x, y):
return np.sum(np.abs(x - y))
3.切比雪夫距离(Chebyshev distance)
在数学领域中,默认情况下人们所指的切比雪夫距离(Chebyshev distance),亦即L∞范数的距离指标。它属于向量空间中的度量工具之一,并被用于衡量两个点之间的差异程度。具体而言,在二维或更高维度的空间中,默认情况下人们所指的切比雪夫距离是指两个点之间沿着坐标轴方向上的最大绝对差值。从数学理论的角度而言,在这种情况下,默认情况下人们通常使用一致范数(uniform norm)来计算两点间的差距,并且这种差距也被称为上确界范数的距离指标。此外,在研究超凸空间时,默认情况下人们还将其视为一种特殊的度量形式
def chebyshev(x, y):
return np.max(np.abs(x - y))
4.闵可夫斯基距离(Minkowski distance)
在狭义相对论框架下所定义的闵氏空间是由一个时间维度和三个空间维度共同构成的时空模型。该著名俄裔德国数学家赫尔曼·(M.) 闵可夫斯基(Hermann Minkowski, 1864–1909)首次提出了这一概念,并构建了基于特殊距离量的几何学体系。他提出的‘平坦空间’概念(即在无引力影响下曲率为零的空间)及其基于特殊距离量的几何学体系与狭义相对论的基本假设完全吻合。而这种时空结构与牛顿力学中的绝对时空观存在显著差异。
def minkowski(x, y, p):
return np.sum(np.abs(x - y) ** p) ** (1 / p)
5.汉明距离(Hamming distance)
它的应用主要集中在数据传输领域中的差错控制编码中。它是信息科学中的一个重要概念。该概念具体表征的是两个等长码元在对应位上出现差异的数量。例如,在信息编码过程中我们常常会用到这个指标来评估码元间的差异程度
表示两个字
,
计算两个字符串之间的汉明距离。执行异或操作,并将运算结果中等于1的位置进行计数。
def hamming(x, y):
return np.sum(x != y) / len(x)
