1. 欧氏距离(Euclidean Distance)
(1)二维平面上两点a(x1,y1)与b(x2,y2)间的欧氏距离:
(2)三维空间两点a(x1,y1,z1)与b(x2,y2,z2)间的欧氏距离:
(3)两个n维向量a(x11,x12,…,x1n)与 b(x21,x22,…,x2n)间的欧氏距离:
(4)也可以用表示成向量运算的形式:
import numpy as np
x = np.array([1,2,3,4])
y = np.array([0,5,6,7])
#方法一:根据公式求解
d1 = np.sqrt(np.sum(np.square(x-y)))
#方法二:根据scipy库求解
from scipy.spatial.distance import pdist
X = np.vstack([x,y])
d2 = pdist(X)
#方法三:numpy方法
d3 = np.linalg.norm(x-y)
d4 = np.sqrt(np.sum(np.square(x-y)))
2. 曼哈顿距离(Manhattan Distance)
(1)二维平面两点a(x1,y1)与b(x2,y2)间的曼哈顿距离
(2)两个n维向量a(x11,x12,…,x1n)与 b(x21,x22,…,x2n)间的曼哈顿距离
x = np.array([1,2,3,4])
y = np.array([0,5,6,7])
#方法一:根据公式求解
d1 = np.sum(np.abs(x-y))
#方法二:根据scipy库求解
from scipy.spatial.distance import pdist
X = np.vstack([x,y])
d2 = pdist(X,'cityblock')
3.切比雪夫距离
国际象棋国王走一步能够移动到相邻的8个方格中的任意一个。那么国王从格子(x1,y1)走到格子(x2,y2)最少需要多少步?自己走走试试。你会发现最少步数总是max( | x2-x1 | , | y2-y1 | ) 步 。有一种类似的一种距离度量方法叫切比雪夫距离。
(1)二维平面两点a(x1,y1)与b(x2,y2)间的切比雪夫距离
(2)两个n维向量a(x11,x12,…,x1n)与 b(x21,x22,…,x2n)间的切比雪夫距离
这个公式的另一种等价形式是
x = np.array([1,2,3,4])
y = np.array([0,5,6,7])
#方法一:根据公式求解
d1 = np.max(np.abs(x-y))
#方法二:根据scipy库求解
from scipy.spatial.distance import pdist
X = np.vstack([x,y])
d2 = pdist(X,'chebyshev')