from scipy.spatial.distance import pdist, squareform
这是一个强大的计算距离的函数
scipy.spatial.distance.pdist(X, metric='euclidean', *args, **kwargs)
参数
X:ndarray
An m by n array of m original observations in an n-dimensional space.
metric:str or function, optional
The distance metric to use. The distance function can be ‘braycurtis’, ‘canberra’, ‘chebyshev’, ‘cityblock’, ‘correlation’, ‘cosine’, ‘dice’, ‘euclidean’, ‘hamming’, ‘jaccard’, ‘jensenshannon’, ‘kulsinski’, ‘mahalanobis’, ‘matching’, ‘minkowski’, ‘rogerstanimoto’, ‘russellrao’, ‘seuclidean’, ‘sokalmichener’, ‘sokalsneath’, ‘sqeuclidean’, ‘yule’.
返回
Y:ndarray
Returns a condensed distance matrix Y. For each i and j (where i
dist(u=X[i], v=X[j]) is computed and stored in entry ij
.
1、Y = pdist(X, 'euclidean')
计算矩阵X样本之间(m*n)的欧氏距离(2-norm) ,返回值为 Y (m*m)为压缩距离元组或矩阵。第二个参数默认为欧氏距离。
2、Y = pdist(X, 'minkowski', p=2.)
计算矩阵X样本之间的明氏距离(p-norm) , ,
3、Y = pdist(X, 'cityblock')
计算矩阵X样本之间的曼哈顿距离。
4、Y= pdist(X, 'seuclidean', V=None)
计算标准欧几里得距离。两个n向量u和v之间的标准欧氏距离为
v是方差向量;v[i]是对点的所有i'th分量计算的方差。如果未通过,则自动计算。
5、Y = pdist(X, 'sqeuclidean')
计算向量间欧氏距离的平方
6、Y = pdist(X, 'cosine')
计算向量u和v之间的余弦距离
剩下还有相关距离、汉明距离(Hamming distance)、杰卡德距离( Jaccard distance)、切比雪夫距离等等,不常用的就不一一列举了,想进一步了解可以看参考文献
这是一个用来压缩矩阵的函数
scipy.spatial.distance.squareform(X, force=’no’, checks=True)
参数
X: ndarray
首先输入如果是矩阵的话必须是距离矩阵,距离矩阵的特点是
1. d*d的对称矩阵,这里d表示点的个数;
2. 对称矩阵的主对角线都是0;
另外,如果输入的是距离向量的话,必须满足d * (d-1) / 2.
force: 类型是str,可选
强制做’tovector’ 或者’tomatrix’的转换
checks: 类型是bool, 可选
如果是false,将不会进行对阵的对称性和0对角线的检查。
返回值
Y:ndarray
如果输入的是简洁的距离矩阵,将返回冗余矩阵;
如果输入的是冗余的距离矩阵,将返回简洁的距离矩阵
用来把一个向量格式的距离向量转换成一个方阵格式的距离矩阵,反之亦然。
1、y = squareform(x)
x 是对称的距离矩阵,对角线元素都为0,y=dist.squareform(a),主要是按照a的下三角线的元素一列一列凑成一个array,如列表所示,依次是下三角的第一列元素,2,3,4, 第二列元素7,8,第三列元素12,所以输出是array([ 2, 3, 4, 7, 8, 12])
2、x = squareform(y)
相反把 y作为元素输入得到冗余矩阵,即x矩阵,即将y还原
import numpy as np
x = np.array([[ 0, 2, 3, 4],
[ 2, 0, 7, 8],
[ 3, 7, 0, 12],
[ 4, 8, 12, 0]])
y = dist.squareform(s)
print(y)
array([ 2, 3, 4, 7, 8, 12])
x=dist.squareform(y)
print(x)
array([[ 0, 2, 3, 4],
[ 2, 0, 7, 8],
[ 3, 7, 0, 12],
[ 4, 8, 12, 0]])
如果想进一步了解,请查看参考文献
参考:
1、pdist:https://docs.scipy.org/doc/scipy/reference/generated/scipy.spatial.distance.pdist.html
2、squareform:https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.spatial.distance.squareform.html