【python】scipy中pdist和squareform

from scipy.spatial.distance import pdist, squareform

pdist

这是一个强大的计算距离的函数

scipy.spatial.distance.pdist(Xmetric='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<j<m),where m is the number of original observations. The metric 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) , ||u-v||_{p}p\geq 1

3、Y = pdist(X, 'cityblock')

计算矩阵X样本之间的曼哈顿距离。

4、Y= pdist(X, 'seuclidean', V=None)

计算标准欧几里得距离。两个n向量u和v之间的标准欧氏距离为

                                \sqrt{\sum (u_{i}-v_{i})^{2}/V[x_{i}]}

v是方差向量;v[i]是对点的所有i'th分量计算的方差。如果未通过,则自动计算。

5、Y = pdist(X, 'sqeuclidean')

计算向量间欧氏距离的平方||u-v||_{2}^{2}

6、Y = pdist(X, 'cosine')

计算向量u和v之间的余弦距离

                                           1-\frac{u\cdot v}{||u||_{2}||v||_{2}}

剩下还有相关距离、汉明距离(Hamming distance)、杰卡德距离( Jaccard distance)、切比雪夫距离等等,不常用的就不一一列举了,想进一步了解可以看参考文献

squareform

这是一个用来压缩矩阵的函数

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

  • 19
    点赞
  • 117
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值