Python外卷(8)--pdist, squareform
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=⎣⎡x1x1T+x1x1T−2x1x1T,x2x2T+x1x1T−2x2x1T,x3x3T+x1x1T−2x3x1T,x1x1T+x2x2T−2x1x2T,x2x2T+x2x2T−2x2x1T,x3x3T+x2x2T−2x3x2T,x1x1T+x3x3T−2x1x3Tx2x2T+x3x3T−2x2x3Tx3x3T+x3x3T−2x3x3T⎦⎤
=[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} =⎣⎡x1x1T,x2x2T,x3x3T,x1x1T,x2x2T,x3x3T,x1x1Tx2x2Tx3x3T⎦⎤+⎣⎡x1x1T,x2x2T,x3x3T,x1x1T,x2x2T,x3x3T,x1x1Tx2x2Tx3x3T⎦⎤T−2⎣⎡x1x1T,x2x1T,x3x1T,x1x2T,x2x1T,x3x2T,x1x3Tx2x3Tx3x3T⎦⎤
=>[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} =>⎣⎡x1x1T,x2x2T,x3x3T,x1x1T,x2x2T,x3x3T,x1x1Tx2x2Tx3x3T⎦⎤
矩阵对应元素相乘,行复制
[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 ⎣⎡x1x1T,x2x1T,x3x1T,x1x2T,x2x1T,x3x2T,x1x3Tx2x3Tx3x3T⎦⎤=⎣⎡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相关推荐
- python外卷(12)-sort(),sorted(),ord(),chr()
Python内置函数 1.sort(),sorted() 2.ord(), chr() 1.sort(),sorted() sort() 是list的方法,对已经存在的列表进行操作,无返回值 a=[3 ...
- python外卷(10)--取整
"取整"那些事 1.python 内置函数 1.1int()--向下取整 1.2round()--四舍五入 2.math模块取整函数 2.1 math.floor()--向下取整 ...
- python外卷(7)--glob
glob模块 1.glob.glob() 2.对比os.listdir() glob是python自带的一个操作文件的模块,可用于查找 指定路径 中 匹配的 文件. 1.glob.glob() 下面是 ...
- 音视频领域或将开启”外卷“之路
点击上方"LiveVideoStack"关注我们 如果说让我们聊一聊2021年音视频技术领域在这一年中的变化,莫不如从LiveVideoStackCon 2021 音视频技术大会 ...
- 双11硝烟散去,零售业开始“外卷”
人类学家亚历山大·亚历山大罗维奇·戈登威泽,曾提出了"内卷"的定义,即文化模式达到了某种最终的形态以后,既没有办法稳定下来,也没有办法转变为新的形态,而只能不断地在内部变得更加复杂 ...
- python外卖点餐系统毕业设计开题报告
本文给出的python毕业设计开题报告,仅供参考!(具体模板和要求按照自己学校给的要求修改) 选题目的和意义 目的:本课题主要目标是设计并能够实现一个基于Python在线外卖点餐系统,管理员通过后台添 ...
- 计算机二级python基础知识总结-江苏省计算机二级python样卷
江苏省高等学校计算机等级考试 二级Python语言考试(样卷) (本试卷完成时间120分钟) 第一部分 计算机信息技术基础知识 选择题(共20分,每题2分)1.根据不同的应用需求,数字音频采用的编码方 ...
- Python外(4)-读写mat文件
读写mat文件 1.读取 2.写入 .mat 是matlab中数据存储的标准格式,Python中能够通过库scipy读取和保存. 导入scipy库 from scipy import io 1.读取 ...
- 阿里云、腾讯云、华为云:从内卷到外卷
近年来,在各行各业的飞速发展以及数字经济的高歌猛进下,国内电商.社交.游戏.视频等多个行业的企业纷纷开始扬帆出海,企图通过拓展海外业务来寻求更广阔的增量市场.无独有偶,随着越来越多的中国企业加快了出海 ...
最新文章
- 简洁版本 STP/RSTP/MSTP的区别以及各自的特点
- 大盘点|轻量级人脸检测算法实现,快到没朋友的都在这里了~
- 集合(normal)
- Deep Compression阅读理解及Caffe源码修改
- linux如何创建备份文件,如何备份Linux 配置文件
- Bootstrap列表组的情景类
- 情人节民宿预定量同比增200% 北京建国门最火
- python groupby_用python自动生成全校学生成绩报告
- 如何生成1-1000的数字,并且顺序打乱
- NHibernate学习总结:(一)NHibernate的使用和配置
- 递归加载无限级分类,虽然我觉得效率不太好。
- Scratch 3.x编程技巧:条件语句与随机数
- LeetCode 青蛙跳问题
- Mac——技巧:修复 M1 Mac Mini 蓝牙问题
- TexturePacker 3.0 使用教程
- Grassmann流形 — 用于子空间比较【理论】
- C# System命名空间表
- 北大教授的美国博士生涯:学术是自由灵魂的分泌物
- PAT 1131. Subway Map (30) DFS
- 【调剂】中科院自动化所医疗机器人课题组招收调剂研究生