导入必要库 :
from scipy.spatial.distance import pdist, squareform
一、距离计算(压缩成一维的)
1、欧式距离
计算数组矩阵 X 样本之间的欧式距离,返回值为 Y 为压缩距离元组或矩阵(以下等同)
X = pdist(X, 'euclidean')
2、明氏距离
X = pdist(X, 'minkowski', p)
3、曼哈顿距离
Y = pdist(X, 'cityblock')
4、标准化欧式距离
计算数组样本之间的标准化欧式距离 ,v是方差向量,表示 v[i]表示第i个分量的方差,如果缺失。默认自动计算。
X = pdist(X, 'seuclidean', V=None)
5、欧式距离的平方
X = pdist(X, 'sqeuclidean')
6、余弦距离
X = pdist(X, 'cosine')
7、相关距离
X = pdist(X, 'hamming')
注意:相关距离 + 相关系数 = 1。所以,相关系数为:
X = 1 - pdist(X, 'correlation')
# 或采用 numpy 的相关系数函数
X = np.corrcoef(X)
8、汉明距离
X = pdist(X, 'hamming')
9、杰卡德距离
X = pdist(X, 'jaccard')
10、切比雪夫距离
X = pdist(X, 'chebyshev')
11、堪培拉距离
X = pdist(X, 'canberra')
12、马氏距离
X = pdist(X, 'mahalanobis', VI=None)
还有很多,具体参考官方文件。
二、解压(即解压成 N * N 矩阵)
Y = squareform(X, force='no', checks=True)
其中,X 就是上文提到的压缩矩阵 Y,force 如同 MATLAB 一样,如果 force 等于 ‘tovector’ or ‘tomatrix’, 输入就会被当做距离矩阵或距离向量。
cheak 当 X-X.T 比较小或 diag(X) 接近于零,是有必要设成 True 的,返回值 Y 为一个距离矩阵Y[i,j] 表示样本 i 与样本 j 的距离。