python 求各种距离公式(numpy矩阵)

导入必要库 :

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 的距离。

上一篇:MaxCompute/Dataworks云数仓高可用最佳实践


下一篇:from scipy import special, optimize, from ._nnls import nnls ImportError: DLL load failed: 找不到指定的模块。