Scipy中计算距离的模块是scipy.spatial.distance,最常用的方法是计算距离矩阵,换句话说,从存储在矩形数组中的观测向量集合中进行距离矩阵的计算。

一,两两距离

在n维空间中的观测值,计算两两之间的距离。距离值越大,相关度越小。

scipy.spatial.distance.pdist(X, metric='euclidean', **kwargs)

函数名是Pairwise DISTance的简写,pairwise是指两两的,对于一个二维数组,pdist()计算任意两行之间的距离。

参数注释:

  • X:ndarray类型,n维空间中m个观测值构成的 m行*n列 的数组
  • metric:计算距离的函数,有效值是 ‘braycurtis’, ‘canberra’, ‘chebyshev’, ‘cityblock’, ‘correlation’, ‘cosine’, ‘dice’, ‘euclidean’, ‘hamming’, ‘jaccard’, ‘jensenshannon’, ‘kulsinski’, ‘mahalanobis’, ‘matching’, ‘minkowski’, ‘rogerstanimoto’, ‘russellrao’, ‘seuclidean’, ‘sokalmichener’, ‘sokalsneath’, ‘sqeuclidean’, ‘yule’
  • **kwargs:dick类型,metric的额外参数,大致有:
    • p : scalar The p-norm to apply for Minkowski, weighted and unweighted. Default: 2.
    • w : ndarray The weight vector for metrics that support weights (e.g., Minkowski).
    • V : ndarray The variance vector for standardized Euclidean. Default: var(X, axis=0, ddof=1)
    • VI : ndarray The inverse of the covariance matrix for Mahalanobis. Default: inv(cov(X.T)).T
    • out : ndarray. The output array If not None, condensed distance matrix Y is stored in this array. Note: metric independent, it will become a regular keyword arg in a future scipy version

二,配对记算距离

从两个输入的集合中配对,计算每对中两个数据集的距离:

scipy.spatial.distance.cdist(XA, XB, metric='euclidean', *args, **kwargs)

XA和XB都是ndarray类型,在n维空间中,XA和XB进行配对,计算一队中两个数据集合之间的距离。

举个例子,XA是8行3列的数组,XB是1行3列的数组,XA的每一行都和XB进行配对,计算对中两个数据之间的距离:

>>> a = np.array([[0, 0, 0],
... [0, 0, 1],
... [0, 1, 0],
... [0, 1, 1],
... [1, 0, 0],
... [1, 0, 1],
... [1, 1, 0],
... [1, 1, 1]])
>>> b = np.array([[ 0.1, 0.2, 0.4]])
>>> distance.cdist(a, b, 'cityblock')
array([[ 0.7],
[ 0.9],
[ 1.3],
[ 1.5],
[ 1.5],
[ 1.7],
[ 2.1],
[ 2.3]])

三,距离向量和距离矩阵的转换

把向量形式的距离向量表示转换成方形的距离矩阵(dense matrix)形式,也可以把方形的距离矩阵转换为距离向量:

scipy.spatial.distance.squareform(X, force='no', checks=True)

在计算样本集中的样本之间的距离矩阵时,squareform()函数和 pdist()函数经常同时出现, squareform()函数的参数就是 pdist()函数的 的返回值,把 pdist() 返回的一维形式,拓展为矩阵。

举个例子,对于矩阵a,沿对角线对称 ,一般是距离矩阵,对角线元素都为0,

from scipy.spatial import distance as dist

a
array([[ 0, 2, 3, 4],
[ 2, 0, 7, 8],
[ 3, 7, 0, 12],
[ 4, 8, 12, 0]])

调用函数squareform(),按照a的下三角线的元素一列一列展开成一维数组,首先是下三角的第一列元素,2,3,4;其次是第二列元素7,8;最后是第三列元素12,所以输出v是array([ 2,  3,  4,  7,  8, 12])

v=dist.squareform(a)
v
array([ 2, 3, 4, 7, 8, 12])

相反,把v作为输入参数传递给函数squareform(),得到冗余矩阵b,也就是把数组还原为距离矩阵a。

b=dist.squareform(v)
b
array([[ 0, 2, 3, 4],
[ 2, 0, 7, 8],
[ 3, 7, 0, 12],
[ 4, 8, 12, 0]])

参考文档:

scipy.spatial.distance

R绘图 第十一篇:统计转换、位置调整、标度和向导(ggplot2)的更多相关文章

  1. R绘图 第七篇:绘制条形图(ggplot2)

    使用geom_bar()函数绘制条形图,条形图的高度通常表示两种情况之一:每组中的数据的个数,或数据框中列的值,高度表示的含义是由geom_bar()函数的参数stat决定的,stat在geom_ba ...

  2. R绘图 第八篇:绘制饼图(ggplot2)

    geom_bar()函数不仅可以绘制条形图,还能绘制饼图,跟绘制条形图的区别是坐标系不同,绘制饼图使用的坐标系polar,并且设置theta="y": coord_polar(th ...

  3. R实战 第十一篇:处理缺失值

    在真实的世界中,缺失数据是经常出现的,并可能对分析的结果造成影响.在R中,经常使用VIM(Visualization and Imputation of Missing values)包来对缺失值进行 ...

  4. R绘图 第五篇:绘制散点图(ggplot2)

    ggplot2包中绘制点图的函数有两个:geom_point和 geom_dotplot,当使用geom_dotplot绘图时,point的形状是dot,不能改变点的形状,因此,geom_dotplo ...

  5. R绘图 第四篇:绘制箱图(ggplot2)

    箱线图通过绘制观测数据的五数总括,即最小值.下四分位数.中位数.上四分位数以及最大值,描述了变量值的分布情况.箱线图能够显示出离群点(outlier),离群点也叫做异常值,通过箱线图能够很容易识别出数 ...

  6. R绘图 第六篇:绘制线图(ggplot2)

    线图是由折线构成的图形,线图是把散点从左向右用直线连接起来而构成的图形,在以时间序列为x轴的线图中,可以看到数据增长的趋势. geom_line(mapping = NULL, data = NULL ...

  7. R绘图 第十篇:绘制文本、注释和主题(ggplot2)

    使用ggplot2包绘制时,为了更直观地向用户显示报表的内容和外观,需要使用geom_text()函数添加文本说明,使用annotate()添加注释,并通过theme()来调整非数据的外观. 一,文本 ...

  8. R实战 第五篇:绘图(ggplot2)

    ggplot2包实现了基于语法的.连贯一致的创建图形的系统,由于ggplot2是基于语法创建图形的,这意味着,它由多个小组件构成,通过底层组件可以构造前所未有的图形.ggplot2可以把绘图拆分成多个 ...

  9. R绘图 第九篇:绘制散点图和气泡图(ggplot2)

    绘制散点图(scatterplots)使用geom_point()函数,气泡图(bubblechart)也是一个散点图,只不过点的大小由一个变量(size)来控制.散点图潜在的最大问题是过度绘图:当一 ...

随机推荐

  1. 【Tomcat】Unrecognized Windows Sockets error: 10106: Socket creation failed

    tomcat8启动过程中报如下错误 -Nov- ::]: java.net.SocketException: Unrecognized Windows Sockets error: : create ...

  2. flask中的url_for的使用

    有多个路由的程序需要连接不同的网页链接,例如导航条 模板中构建正确的动态url较为困难,如果重定义路由,模板中的链接失效 url_for()函数: 使用url映射中保存的信息生成url 用法: 用视图 ...

  3. 软件工程-CMM与CMMI

    CMM CMMI

  4. [20180403]访问dba_autotask_task无输出问题.txt

    [20180403]访问dba_autotask_task无输出问题.txt --//链接http://www.itpub.net/thread-1911421-1-1.html的讨论,还没注意原先的 ...

  5. windows 实用技巧

    以下内容版权归原作者所有!!!如果侵权,立即删除. 1.系统激活:https://mp.weixin.qq.com/s/Kl_iEeSSxSprblfSRZ6yEQ 2.百度云下载:https://w ...

  6. [MapReduce_add_5] MapReduce 实现标签的生成与聚合

    0. 说明 MapReduce 实现标签的生成与聚合 介绍 && 流程图 && 程序编写 1. 介绍 [1.1 原始有效数据] 86913510 {"revi ...

  7. windows7下的一个好玩的,你绝对不知道

    今天学到了一个好东西,分享一下, windows7系统测试是可以的,其他系统暂时没测试,分享给大家玩玩: 在桌面新建一个文件夹: 文件夹重命名为:GodMode.{ED7BA470-8E54-465E ...

  8. 5、爬虫系列之scrapy框架

    一 scrapy框架简介 1 介绍 (1) 什么是Scrapy? Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,非常出名,非常强悍.所谓的框架就是一个已经被集成了各种功能(高性能 ...

  9. vue的组件详解

    什么是组件 组件(Component)是 Vue.js 最强大的功能之一.(好比电脑中的每一个元件(键盘,鼠标,CPU),它是一个具有独立的逻辑和功能或界面,同时又能根据规定的接口规则进行互相融合,变 ...

  10. python第五十三课——time模块

    1.time.datatime.calendar模块的引入讲解(重视) Unix时间戳(timestamp):返回的是数值类型数据(float值), 概念:记录了从1970年00点00分00秒至今的秒 ...