导入必要库 :
from scipy.spatial.distance import pdist, squareform
计算数组矩阵 X 样本之间的欧式距离,返回值为 Y 为压缩距离元组或矩阵(以下等同)
X = pdist(X, 'euclidean')
X = pdist(X, 'minkowski', p)
Y = pdist(X, 'cityblock')
计算数组样本之间的标准化欧式距离 ,v是方差向量,表示 v[i]表示第i个分量的方差,如果缺失。默认自动计算。
X = pdist(X, 'seuclidean', V=None)
X = pdist(X, 'sqeuclidean')
X = pdist(X, 'cosine')
X = pdist(X, 'hamming')
注意:相关距离 + 相关系数 = 1。所以,相关系数为:
X = 1 - pdist(X, 'correlation') # 或采用 numpy 的相关系数函数 X = np.corrcoef(X)
X = pdist(X, 'hamming')
X = pdist(X, 'jaccard')
X = pdist(X, 'chebyshev')
X = pdist(X, 'canberra')
X = pdist(X, 'mahalanobis', VI=None)
还有很多,具体参考官方文件。
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 的距离。