您的位置:首页 > 编程语言 > Python开发

python求各种距离公式

2016-09-19 17:01 856 查看
今天一个偶然的机会体会到了python数据运算的强大。求一个数组各样本之间的距离仅简单的几句代码就行。看来真的技术改变世界啊。废话不多说,记下来怕以后忘记。
from scipy.spatial.distance import pdist, squareform
下面结合API文档标注一下具体用法:

1.X = pdist(X, 'euclidean')
计算数组X样本之间的欧式距离 返回值为 Y 为压缩距离元组或矩阵(以下等同)

2. X = pdist(X, 'minkowski', p)
计算数组样本之间的明氏距离
3. Y = pdist(X, 'cityblock')
计算数组样本之间的曼哈顿距离
4. X = pdist(X, 'seuclidean', V=None)
计算数组样本之间的标准化欧式距离 ,v是方差向量,表示 v[i]表示第i个分量的方差,如果缺失。默认自动计算。
5. X = pdist(X, 'sqeuclidean')
计算数组样本之间欧式距离的平方

6. X = pdist(X, 'cosine')
计算数组样本之间余弦距离 公式为:
7. X = pdist(X, 'correlation')
计算数组样本之间的相关距离。

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)
计算数据样本之间的马氏距离
还有好多不常用的距离就不一一写出了,如果想查阅可以点点我,点我

除了对指定的距离计算该函数还可以穿lmbda表达式进行计算,如下
dm = pdist(X, lambda u, v: np.sqrt(((u-v)**2).sum()))
二、得到压缩矩阵后还需下一步即:

Y=scipy.spatial.distance.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的距离。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python