pdist, squareform

  • 1.pdist, squareform使用例子
  • 2.通过矩阵的四则运算实现上述pdist, squareform

scipy.spatial.distance 距离计算库中有两个函数:pdist, squareform,用于计算样本对之间的欧式距离,并且将样本间距离用方阵表示出来。

(题外话)
SciPy: 基于Numpy,提供方法(函数库)直接计算结果,封装了一些高阶抽象和物理模型
Numpy: 来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多,本身是由C语言开发。
Pandas: 基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
参考 资料:https://www.jianshu.com/p/32cb09d84487

(回正题)

1.pdist, squareform使用例子

pdist, squareform的操作基于numpy,

>>> import numpy as np
>>> from scipy.spatial.distance import pdist, squareform
>>> x=np.array([[1,1,1],[2,2,2],[4,4,4]])  #三个一维向量:x1=[1,1,1] x2=[2,2,2],x3=[4,4,4]>>> Dis=pdist(x)
>>> Dis             # d(x1,x2)=sqrt(3)=1.7 ,d(x1,x3)=sqrt(27),d(x2,x3)=sqrt(8)
array([1.73205081, 5.19615242, 3.46410162])>>> D=squareform(Dis)
array([[0.        , 1.73205081, 5.19615242],     # d(x1,x1),d(x1,x2),d(x1,x3)[1.73205081, 0.        , 3.46410162],   # d(x2,x1),d(x2,x2),d(x2,x3)[5.19615242, 3.46410162, 0.        ]])    # d(x3,x1),d(x3,x2),d(x3,x1)

因为距离度量具有对称性,即d(x1,x2)=d(x2,x1)d(x1,x2)=d(x2,x1)d(x1,x2)=d(x2,x1),所以上述矩阵为一个对称阵。

2.通过矩阵的四则运算实现上述pdist, squareform

有三个三维样本:x1=[1,1,1],x2=[2,2,2]x3=[4,4,4],样本之间距离的方阵为:

D=[d(x1,x1)d(x1,x2)d(x1,x3)d(x2,x1)d(x2,x2)d(x2,x3)d(x3,x1)d(x3,x2)d(x3,x3)]D=\begin{bmatrix} d(x1,x1)& d(x1,x2) & d(x1,x3)\\ d(x2,x1)& d(x2,x2) & d(x2,x3)\\ d(x3,x1)& d(x3,x2) & d(x3,x3)\end{bmatrix} D=⎣⎡​d(x1,x1)d(x2,x1)d(x3,x1)​d(x1,x2)d(x2,x2)d(x3,x2)​d(x1,x3)d(x2,x3)d(x3,x3)​⎦⎤​

d(x,y)=xxT+yyT−2xyTd(x,y)=xx^T+yy^T-2xy^Td(x,y)=xxT+yyT−2xyT

所以:
D=[x1x1T+x1x1T−2x1x1T,x1x1T+x2x2T−2x1x2T,x1x1T+x3x3T−2x1x3Tx2x2T+x1x1T−2x2x1T,x2x2T+x2x2T−2x2x1T,x2x2T+x3x3T−2x2x3Tx3x3T+x1x1T−2x3x1T,x3x3T+x2x2T−2x3x2T,x3x3T+x3x3T−2x3x3T]D=\begin{bmatrix} x_1x_1^T+x_1x_1^T-2x_1x_1^T,& x_1x_1^T+x_2x_2^T-2x_1x_2^T ,& x_1x_1^T+x_3x_3^T-2x_1x_3^T\\ x_2x_2^T+x_1x_1^T-2x_2x_1^T,& x_2x_2^T+x_2x_2^T-2x_2x_1^T ,& x_2x_2^T+x_3x_3^T-2x_2x_3^T\\ x_3x_3^T+x_1x_1^T-2x_3x_1^T,& x_3x_3^T+x_2x_2^T-2x_3x_2^T ,& x_3x_3^T+x_3x_3^T-2x_3x_3^T\end{bmatrix} D=⎣⎡​x1​x1T​+x1​x1T​−2x1​x1T​,x2​x2T​+x1​x1T​−2x2​x1T​,x3​x3T​+x1​x1T​−2x3​x1T​,​x1​x1T​+x2​x2T​−2x1​x2T​,x2​x2T​+x2​x2T​−2x2​x1T​,x3​x3T​+x2​x2T​−2x3​x2T​,​x1​x1T​+x3​x3T​−2x1​x3T​x2​x2T​+x3​x3T​−2x2​x3T​x3​x3T​+x3​x3T​−2x3​x3T​​⎦⎤​

=[x1x1T,x1x1T,x1x1Tx2x2T,x2x2T,x2x2Tx3x3T,x3x3T,x3x3T]+[x1x1T,x1x1T,x1x1Tx2x2T,x2x2T,x2x2Tx3x3T,x3x3T,x3x3T]T−2[x1x1T,x1x2T,x1x3Tx2x1T,x2x1T,x2x3Tx3x1T,x3x2T,x3x3T]=\begin{bmatrix} x_1x_1^T,& x_1x_1^T ,& x_1x_1^T\\ x_2x_2^T,& x_2x_2^T ,& x_2x_2^T\\ x_3x_3^T,& x_3x_3^T ,& x_3x_3^T \end{bmatrix}+ \begin{bmatrix} x_1x_1^T,& x_1x_1^T ,& x_1x_1^T\\ x_2x_2^T,& x_2x_2^T ,& x_2x_2^T\\ x_3x_3^T,& x_3x_3^T ,& x_3x_3^T \end{bmatrix}^T-2 \begin{bmatrix} x_1x_1^T,& x_1x_2^T ,&x_1x_3^T\\ x_2x_1^T,& x_2x_1^T ,&x_2x_3^T\\ x_3x_1^T,& x_3x_2^T ,& x_3x_3^T\end{bmatrix} =⎣⎡​x1​x1T​,x2​x2T​,x3​x3T​,​x1​x1T​,x2​x2T​,x3​x3T​,​x1​x1T​x2​x2T​x3​x3T​​⎦⎤​+⎣⎡​x1​x1T​,x2​x2T​,x3​x3T​,​x1​x1T​,x2​x2T​,x3​x3T​,​x1​x1T​x2​x2T​x3​x3T​​⎦⎤​T−2⎣⎡​x1​x1T​,x2​x1T​,x3​x1T​,​x1​x2T​,x2​x1T​,x3​x2T​,​x1​x3T​x2​x3T​x3​x3T​​⎦⎤​

=>[x1x1T,x1x1T,x1x1Tx2x2T,x2x2T,x2x2Tx3x3T,x3x3T,x3x3T]=> \begin{bmatrix} x_1x_1^T,& x_1x_1^T ,& x_1x_1^T\\ x_2x_2^T,& x_2x_2^T ,& x_2x_2^T\\ x_3x_3^T,& x_3x_3^T ,& x_3x_3^T \end{bmatrix} =>⎣⎡​x1​x1T​,x2​x2T​,x3​x3T​,​x1​x1T​,x2​x2T​,x3​x3T​,​x1​x1T​x2​x2T​x3​x3T​​⎦⎤​
矩阵对应元素相乘,行复制

[x1x1T,x1x2T,x1x3Tx2x1T,x2x1T,x2x3Tx3x1T,x3x2T,x3x3T]=[x1x2x3]∗[x1x2x3]T\begin{bmatrix} x_1x_1^T,& x_1x_2^T ,&x_1x_3^T\\ x_2x_1^T,& x_2x_1^T ,&x_2x_3^T\\ x_3x_1^T,& x_3x_2^T ,& x_3x_3^T\end{bmatrix}= \begin{bmatrix} x1\\ x2\\ x3\end{bmatrix}* \begin{bmatrix} x1\\ x2\\ x3\end{bmatrix}^T ⎣⎡​x1​x1T​,x2​x1T​,x3​x1T​,​x1​x2T​,x2​x1T​,x3​x2T​,​x1​x3T​x2​x3T​x3​x3T​​⎦⎤​=⎣⎡​x1x2x3​⎦⎤​∗⎣⎡​x1x2x3​⎦⎤​T

程序实现:

X=np.array([[1,1,1],[2,2,2],[3,3,3]])
X2=(X*X).sum(1)*np.ones([3,3])
XXT=np.matmul(X,X.T)
D=X2+X2.T-2*XXT
D=np.sqrt(D2)
print (D)# 输出
[[ 0.          1.73205081  5.19615242][ 1.73205081  0.          3.46410162][ 5.19615242  3.46410162  0.        ]]

**温馨提示:**上述矩阵为距离矩阵,在实际应用的过程中,注意使用的是距离的平方,还是距离。

Python外卷(8)--pdist, squareform相关推荐

  1. python外卷(12)-sort(),sorted(),ord(),chr()

    Python内置函数 1.sort(),sorted() 2.ord(), chr() 1.sort(),sorted() sort() 是list的方法,对已经存在的列表进行操作,无返回值 a=[3 ...

  2. python外卷(10)--取整

    "取整"那些事 1.python 内置函数 1.1int()--向下取整 1.2round()--四舍五入 2.math模块取整函数 2.1 math.floor()--向下取整 ...

  3. python外卷(7)--glob

    glob模块 1.glob.glob() 2.对比os.listdir() glob是python自带的一个操作文件的模块,可用于查找 指定路径 中 匹配的 文件. 1.glob.glob() 下面是 ...

  4. 音视频领域或将开启”外卷“之路

    点击上方"LiveVideoStack"关注我们 如果说让我们聊一聊2021年音视频技术领域在这一年中的变化,莫不如从LiveVideoStackCon 2021 音视频技术大会 ...

  5. 双11硝烟散去,零售业开始“外卷”

    人类学家亚历山大·亚历山大罗维奇·戈登威泽,曾提出了"内卷"的定义,即文化模式达到了某种最终的形态以后,既没有办法稳定下来,也没有办法转变为新的形态,而只能不断地在内部变得更加复杂 ...

  6. python外卖点餐系统毕业设计开题报告

    本文给出的python毕业设计开题报告,仅供参考!(具体模板和要求按照自己学校给的要求修改) 选题目的和意义 目的:本课题主要目标是设计并能够实现一个基于Python在线外卖点餐系统,管理员通过后台添 ...

  7. 计算机二级python基础知识总结-江苏省计算机二级python样卷

    江苏省高等学校计算机等级考试 二级Python语言考试(样卷) (本试卷完成时间120分钟) 第一部分 计算机信息技术基础知识 选择题(共20分,每题2分)1.根据不同的应用需求,数字音频采用的编码方 ...

  8. Python外(4)-读写mat文件

    读写mat文件 1.读取 2.写入 .mat 是matlab中数据存储的标准格式,Python中能够通过库scipy读取和保存. 导入scipy库 from scipy import io 1.读取 ...

  9. 阿里云、腾讯云、华为云:从内卷到外卷

    近年来,在各行各业的飞速发展以及数字经济的高歌猛进下,国内电商.社交.游戏.视频等多个行业的企业纷纷开始扬帆出海,企图通过拓展海外业务来寻求更广阔的增量市场.无独有偶,随着越来越多的中国企业加快了出海 ...

最新文章

  1. 简洁版本 STP/RSTP/MSTP的区别以及各自的特点
  2. 大盘点|轻量级人脸检测算法实现,快到没朋友的都在这里了~
  3. 集合(normal)
  4. Deep Compression阅读理解及Caffe源码修改
  5. linux如何创建备份文件,如何备份Linux 配置文件
  6. Bootstrap列表组的情景类
  7. 情人节民宿预定量同比增200% 北京建国门最火
  8. python groupby_用python自动生成全校学生成绩报告
  9. 如何生成1-1000的数字,并且顺序打乱
  10. NHibernate学习总结:(一)NHibernate的使用和配置
  11. 递归加载无限级分类,虽然我觉得效率不太好。
  12. Scratch 3.x编程技巧:条件语句与随机数
  13. LeetCode 青蛙跳问题
  14. Mac——技巧:修复 M1 Mac Mini 蓝牙问题
  15. TexturePacker 3.0 使用教程
  16. Grassmann流形 — 用于子空间比较【理论】
  17. C# System命名空间表
  18. 北大教授的美国博士生涯:学术是自由灵魂的分泌物
  19. PAT 1131. Subway Map (30) DFS
  20. 【调剂】中科院自动化所医疗机器人课题组招收调剂研究生

热门文章

  1. linux powerpc i2c驱动 之 i2c设备层的注册过程
  2. 基于 Android NDK 的学习之旅-----序言
  3. LDR 、ADR介绍
  4. ARM uboot中的.lds
  5. 【转】傅里叶分析之掐死教程(完整版)更新于2014.06.06
  6. 【转】TCP和UDP的区别
  7. 【转】RabbitMQ六种队列模式-3.发布订阅模式
  8. 【转】使用多个 Azure 订阅(按照订阅收费)
  9. Microsoft Visual Studio 文件识别及其用途简述
  10. asp.net mvc webform和razor的page基类区别