1. 欧氏距离
欧式距离欧氏距离是最常见也是最常用的一种距离计算方式,也叫欧几里得距离、
距离。 函数形式如下:
表示两个
维向量,
为两个
维向量的欧式距离。
python实现
import numpy as np
x = np.random.random(10)
y = np.random.random(10)
# n维向量
#方法一:根据公式求解
d1 = np.sqrt(np.sum(np.square(x - y)))
#方法二:根据np.linalg.norm求解
d2 = np.linalg.norm(x-y)
#方法三:根据scipy库求解
from scipy.spatial.distance import pdist
X = np.vstack([x,y]) #将x,y两个一维数组合并成一个2D数组 ;[[x1,x2,x3...],[y1,y2,y3...]]
d3 = pdist(X) #d2=np.sqrt(x1-y1)
# m * n维矩阵欧氏距离计算, 一行代表一个样本,一列代表一个特征,计算对应样本间欧氏距离
from sklearn.metrics import pairwise_distances
from scipy.spatial import distance_matrix
from scipy.spatial.distance import cdist
d1 = pairwise_distances(x.reshape(-1, 10), y.reshape(-1, 10)) # 运行时间次之 占cpu多
d2 = distance_matrix(x.reshape(-1, 10), y.reshape(-1, 10))
d3 = cdist(x.reshape(-1, 10), y.reshape(-1, 10)) # 运行时间最短 占cpu少,建议使用
2. 曼哈顿距离
曼哈顿距离也称为城市街区距离、
距离,顾名思义,假设在曼哈顿街区从P点到Q点,我们不能直接穿过高楼大厦走直线的距离,而是表示走过的街道的距离。在二维坐标上的表示,即两个点在标准坐标系上的绝对轴距之和。具体公式表示:
表示两个
维向量,
为两个
维向量的曼哈顿距离。
python实现
import numpy as np
x = np.array([1,2,3])
y = np.array([4,5,6])
d1 = np.sum(np.abs(x-y))
d2 = np.linalg.norm(x-y, ord=1)
from scipy.spatial.distance import pdist
X=np.vstack([x,y])
d3=pdist(X,'cityblock')
3. 闵氏距离
闵氏距离,全名闵可夫斯基距离,它不是一种距离,而是一组距离的定义,是对多个距离度量公式的概括性的表述。函数表达:
p取1或2时的明氏距离是最为常用的:
p = 2即为欧氏距离。
p = 1时则为曼哈顿距离。
当p取无穷时的极限情况下,可以得到切比雪夫距离
P为不同值时,等距离组成的形状:
python实现
import numpy as np
x=np.random.random(10)
y=np.random.random(10)
#方法一:根据公式求解,p=2
d1=np.sqrt(np.sum(np.square(x-y)))
d2 = np.linalg.norm(x-y, ord=2)
from scipy.spatial.distance import pdist
X=np.vstack([x,y])
d3=pdist(X,'minkowski',p=2)
4. 切比雪夫距离
切比雪夫距离,也叫
度量,在国际象棋中,国王可以直行、横行、斜行,所以国王走一步可以移动到相邻的8个方格中的任意一个。国王从格子(x1,y1)走到格子(x2,y2)最少需要多少步,这个距离就叫切比雪夫距离。表示为:
python实现
import