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. C语言程序试题

    一个无向连通图G点上的哈密尔顿(Hamiltion)回路是指从图G上的某个顶点出发,经过图上所有其他顶点一次且仅一次,最后回到该顶点的路劲.一种求解无向图上哈密尔顿回路算法的基础实现如下: 假设图G存 ...

  2. [20180317]12c TABLE ACCESS BY INDEX ROWID BATCHED.txt

    [20180317]12c TABLE ACCESS BY INDEX ROWID BATCHED.txt --//简单探究12c TABLE ACCESS BY INDEX ROWID BATCHE ...

  3. 洗礼灵魂,修炼python(44)--巩固篇—反射之重新认识hasattr,gettattr,setattr,delattr

    不急着进入正题.先动手完成一个小程序: 设计一套简单的服务开启关闭程序,每次开启或关闭都得打印服务当前的状态: class Server(object): def __init__(self): se ...

  4. Spring Boot 使用 ServletFileUpload上传文件失败,upload.parseRequest(request)为空

    使用Apache Commons FileUpload组件上传文件时总是返回null,调试发现ServletFileUpload对象为空,在Spring Boot中有默认的文件上传组件,在使用Serv ...

  5. sql 删除默认索引,对象 依赖于 列,由于一个或多个对象访问此列

    declare @name varchar(50)select  @name =b.name from sysobjects b join syscolumns aon b.id = a.cdefau ...

  6. Web服务并发I/O模型

    I/O模型: 阻塞型.非阻塞型.复用型.信号驱动型.异步 同步/异步: 关注消息通知机制 消息通知: 同步:等待对方返回消息 异步:被调用者通过状态.通知或回调机制通知调用者被调用者的运行状态 阻塞/ ...

  7. kafka 配置文件参数详解

    kafka的配置分为 broker.producter.consumer三个不同的配置 一 BROKER 的全局配置 最为核心的三个配置 broker.id.log.dir.zookeeper.con ...

  8. 【转载】Linux 内存管理机制

    在Linux中经常发现空闲内存很少,似乎所有的内存都被系统占用了,表面感觉是内存不够用了,其实不然.这是Linux内存管理的一个优秀特性,主要特点是,无论物理内存有多大,Linux 都将其充份利用,将 ...

  9. Java中一个线程只有六个状态。至于阻塞、可运行、挂起状态都是人们为了便于理解,自己加上去的。

    java中,线程的状态使用一个枚举类型来描述的.这个枚举一共有6个值: NEW(新建).RUNNABLE(运行).BLOCKED(锁池).TIMED_WAITING(定时等待).WAITING(等待) ...

  10. ActivityThread

    /** * This manages the execution of the main thread in an * application process, scheduling and exec ...