Numpy 中某个矩阵的平方距离计算方法
Numpy 中某个矩阵的平方距离计算方法
目录
- Numpy 中某个矩阵的平方距离计算方法
- 目录
- 具体流程
- 分析
- 参考
具体流程
1.假设:有一个n*m的矩阵,其内部为n个m维点的坐标:
rand = np.random.RandomState(42)x = rand.randint(0, 10, (3, 2))x
Out[332]:
array([[6, 3],[7, 4],[6, 9]])
2.计算在坐标系中每对点的差值
difference = x[:, None, :] - x[None, :, :]difference.shape
Out[334]: (3, 3, 2)difference
Out[335]:
array([[[ 0, 0],[-1, -1],[ 0, -6]],[[ 1, 1],[ 0, 0],[ 1, -5]],[[ 0, 6],[-1, 5],[ 0, 0]]])
3.计算出差值的平方
sq_ = difference ** 2sq_.shape
Out[337]: (3, 3, 2)sq_
Out[338]:
array([[[ 0, 0],[ 1, 1],[ 0, 36]],[[ 1, 1],[ 0, 0],[ 1, 25]],[[ 0, 36],[ 1, 25],[ 0, 0]]], dtype=int32)
4.将差值求和得平方距离
dist = sq_.sum(-1)dist
Out[341]:
array([[ 0, 2, 36],[ 2, 0, 26],[36, 26, 0]], dtype=int32)
分析
从二维到三维的变化过程:添加一个**np.newaxis**(等同于**None**)
**其实就是在对应的shape位置上加上一个*1***如以下代码所示
x1 = x[:, None, :]x2 = x[None, :, :]x1.shape
Out[344]: (3, 1, 2)x2.shape
Out[345]: (1, 3, 2)
那么对于这两个shape (3, 1, 2) 和 (1, 3, 2)而言
由numpy的广播原则最后两个shape 都会变成(3, 3, 2)可以这样理解:
认为现在是一个三维的坐标图
对于(3, 1, 2)而言,所有的值都在 xoz 平面上分布
对于(1, 3, 2)而言,所有的值都在 yoz 平面上分布那么广播后:
xoz 平面上的点会沿着y轴向前复制三个相同的平面
yoz 平面上的点也会沿着x轴向前复制三个那么必然在第一象限内两平面产生的这样两个3*3*2的空间会有交点
前述代码中第一步的减法即是在这些交点处执行了
平方无需多言接下来是求和:之前扩大维数的时候将点分别置于了两个侧平面
其中x, y轴均是表示点的个数
而z轴表示的是实际每个点的x,y坐标信息那么不难理解:
将z轴累加降维就可以得到两个点横纵坐标的平方和最终得到的结果矩阵:
axis 0 和 axis 1 表示的都是每个点
交点处即为两点距离的平方
参考
《Python数据科学手册》
Numpy 中某个矩阵的平方距离计算方法相关推荐
- numpy中的矩阵与数学上的矩阵的关系
➤00 矢量.矩阵 在数学上,矢量和矩阵之间具有很强的联系.矢量可以看成行数.或者列数为1的矩阵.所以它可以被分成行矢量,或者列矢量. 下面分别表示了一个行矢量和一个列矢量. xˉ=[x1,x2,x3 ...
- fun是什么意思 python中def_【python】 numpy中的矩阵转置(ndarray.T)为什么不加括号却可以实现方法的功能...
[python] numpy中的矩阵转置(ndarray.T)为什么不加括号却可以实现方法的功能 经过搜索和查询源码了解到,.T就是一个方法,但是是被装饰器修饰了一下... @property是pyt ...
- python Numpy 中的矩阵向量乘法(np.multiply()、np.dot()、np.matmul() 和 星号(*)、@)
python Numpy 中的矩阵向量乘法 总结 1. 对于 np.array 对象 1.1 元素乘法 用 a*b 或 np.multiply(a,b) 1.2 矩阵乘法 用 np.dot(a,b) ...
- numpy中向量和矩阵相关乘法总结
numpy中矩阵相关乘法总结 一.numpy中向量和矩阵的概念 向量:1维 矩阵:至少是2维 注意:numpy中对于向量的定义与数学中对向量的定义有些不同,数学中对向量的定义是竖向写法,但由于nump ...
- python numpy矩阵索引_python – Numpy中的矩阵索引
索引后查看形状: In [295]: A=np.matrix([1,2,3]) In [296]: A.shape Out[296]: (1, 3) In [297]: A[0] Out[297]: ...
- numpy中计算矩阵数值的核心函数
简 介: 关键词: 矩阵,分解,QR #mermaid-svg-biyMQ4sXX3c1a4oB {font-family:"trebuchet ms",verdana,arial ...
- numpy中的*(矩阵对应位置元素相乘)和np.dot(矩阵执行矩阵乘法运算)
注意矩阵乘法运算中的"*"和"np.dot()"是不一样的. "*"的意思是给定一个大小为(4,3)的矩阵A和一个大小为(4,3)的矩阵B, ...
- Numpy 中的矩阵向量乘法
结论: 元素乘法:np.multiply(a,b) 矩阵乘法:np.dot(a,b) 或 np.matmul(a,b) 或 a.dot(b) 唯独注意:*,在 np.array 中重载为元素乘法,在 ...
- numpy中的矩阵,线性代数
文章目录 1.线性代数 1.1.矩阵 1.1.1.matrix,mat 1.1.3.矩阵乘法 1.1.4. 矩阵的逆 1.1.5.共轭矩阵 1.1.6.线性方程组 1.1.7.转置 1.1.8.矩阵的 ...
- numpy中,矩阵的三种转置transpose、getT、getH的区别
由于没有时间整理,先贴出官方帮助文档,以便知道对矩阵有这三种转置操作,之间的差别以后遇到问题了再整理. help(np.matrix.H) Help on property: Returns the ...
最新文章
- 在python程序中的进程操作
- 深蓝学院《从零开始手写VIO》作业七
- NYOJ 14 会场安排问题
- ctf-HITCON-2016-houseoforange学习
- linux eclipse 调试程序,使用Eclipse对FFmpeg进行调试
- 小程序和网站中无限滚动的实现
- 如何减小Exe, DLL 的大小
- c语言中islower是什么函数,C语言islower函数介绍、示例和实现
- 金融数据分析(十三)投资组合问题
- Android自带Switch系列汇总学习
- md魂斗罗机器人c弹锁定_史上最细节机器人勾C/防勾指南
- 盛迈坤电商:电商运营要怎么样进行选款
- 第二章 java语言基础
- win10安装wifi网卡驱动显示“这个 INF 中的服务安装段落无效“
- 社会化营销,微博如何老树发新芽?
- java park unpark_LockSupport(park/unpark)源码分析
- Selenium Chrome浏览器版本与chromedriver驱动兼容版本对照表
- 自己编写wince的校准程序
- 为什么软件测试工程师跳槽,越跳越值钱。嘎嘎涨薪
- Python 教程:eval()和exac()详细用法以及区别
热门文章
- 怎么用计算机管理员卸载,没有足够的权限卸载请与系统管理员联系怎么解决
- 笔记本装服务器系统 无线网卡无法驱动,笔记本无线驱动,小编教你无线网卡驱动怎么安装...
- 短信验证功能、邮箱验证功能
- python项目实战:天眼查询你所需的公司信息
- 反弹shell的各种姿势
- 面试最后问你期望薪酬_我不能问你的薪水历史吗? 谢谢!
- python爬取ajax_Python爬虫如-何爬取ajax网页之爬取雪球网文章
- android远程控制电视,手机如何远程控制电视
- 如何保证手机APP兼容性覆盖测试
- 华硕笔记本怎么禁用自带键盘