240626_昇思学习打卡-Day8-稀疏矩阵

240626_昇思学习打卡-Day8-稀疏矩阵

稀疏矩阵

在一些应用场景中,比如训练二值化图像分割时,图像的特征是稀疏的,使用一堆0和极个别的1表示这些特征即费事又难看,此时就可以使用稀疏矩阵。通过参考大佬博文,结合个人理解,记录如下:

CSR(Compressed Sparse Row Format)

CSR矩阵通过使用三个一维数组来存储矩阵,row,column和value(各作者可能叫法不同,实际意义相同)

img

假如我们有一个稀疏矩阵
[ 1 7 0 0 0 2 8 0 5 0 3 9 0 6 0 4 ] \left[ \begin{matrix} 1 & 7 & 0 & 0 \\ 0 & 2 & 8 & 0 \\ 5 & 0 & 3 & 9 \\ 0 & 6 & 0 & 4 \\ \end{matrix} \right] 1050720608300094
此时我们可以轻易地看出

value=([1,7,2,8,5,3,9,6,4])  # 里面所有的非零项,从左往右从上往下拿出来
shape=(4,4)

对于row和column来说就比较难看了,相对来说column较简单,column就是每一个非零数对应的列数,我们对照着value来看:

对value的第一个值1,他在稀疏矩阵中第一行第一列,换成索引就是0行0列,此时他在column中的值就是0(列)

对value的第二个值7,他在稀疏矩阵中第一行第二列,换成索引就是0行1列,此时他在column中的值就是1(列)

对value的第三个值2,他在稀疏矩阵中第二行第二列,换成索引就是1行1列,此时他在column中的值就是1(列)

对value的第四个值8,他在稀疏矩阵中第二行第三列,换成索引就是1行2列,此时他在column中的值就是2(列)

对value的第五个值5,他在稀疏矩阵中第三行第一列,换成索引就是2行0列,此时他在column中的值就是0(列)

对value的第六个值3,他在稀疏矩阵中第三行第三列,换成索引就是2行2列,此时他在column中的值就是2(列)

对value的第七个值9,他在稀疏矩阵中第三行第四列,换成索引就是2行3列,此时他在column中的值就是3(列)

对value的第八个值6,他在稀疏矩阵中第四行第二列,换成索引就是3行1列,此时他在column中的值就是1(列)

对value的第九个值4,他在稀疏矩阵中第四行第四列,换成索引就是3行3列,此时他在column中的值就是3(列)

所以得到column的值为

column=([0,1,1,2,0,2,3,1,3])

然后让我们来关注row的值,row的长度是原张量的行数+1,比如此处原张量为4行,所以我们row的长度就是5,row的定义为每一行第一个非零元素在value中的位置,这也才4个数,所以还要再加一个,value的总长度,说的比较抽象,以下举例说明:

首先第一行,第一行的第一个非零元素1,在value中位于第一个,转换成索引就是0,所以第一行在row中的值就是0。

其次第二行,第二行的第一个非零元素2,在value中位于第三个,转换成索引就是2,所以第二行在row中的值就是2。

其次第三行,第三行的第一个非零元素5,在value中位于第五个,转换成索引就是4,所以第三行在row中的值就是4。

其次第四行,第四行的第一个非零元素6,在value中位于第八个,转换成索引就是7,所以第四行在row中的值就是7。

其次第五行,欸等等,第五行在哪呢。没有的啦,row中第五个元素就是value的总长度啦,所以第五个值就是9。

所以row的值就出来咯

row=([0,2,4,7,9])

COOTensor

相对较为简单,仅存储非零元素及每个非零元素的坐标,可视化较强,也是通过使用三个一维数组来存储矩阵,row,column和value

img

对于一个稀疏矩阵
[ 1 7 0 0 0 2 8 0 5 0 3 9 0 6 0 4 ] \left[ \begin{matrix} 1 & 7 & 0 & 0 \\ 0 & 2 & 8 & 0 \\ 5 & 0 & 3 & 9 \\ 0 & 6 & 0 & 4 \\ \end{matrix} \right] 1050720608300094
value、shape、column值都和CSR矩阵相同:

value=([1,7,2,8,5,3,9,6,4])  # 里面所有的非零项,从左往右从上往下拿出来
shape=(4,4)
column=([0,1,1,2,0,2,3,1,3])

row有所不同,此时的row代表的是每一个非零元素在第几行,比如:

第一个非零元素1在第一行,行索引为0,所以该元素对应的row值为0。

第二个非零元素7在第一行,行索引为0,所以该元素对应的row值为0。

第三个非零元素2在第二行,行索引为1,所以该元素对应的row值为1。

第四个非零元素8在第二行,行索引为1,所以该元素对应的row值为1。

第五个非零元素5在第三行,行索引为2,所以该元素对应的row值为2。

第六个非零元素3在第三行,行索引为2,所以该元素对应的row值为2。

第七个非零元素9在第三行,行索引为2,所以该元素对应的row值为2。

第八个非零元素6在第四行,行索引为3,所以该元素对应的row值为3。

第九个非零元素4在第四行,行索引为3,所以该元素对应的row值为3。

所以该矩阵的row为

row=([0,0,1,1,2,2,2,3,3])

参考博客:

稀疏矩阵的存储格式 | Xiang的博客 (flyxu.github.io)
打卡图片:

image-20240626204852433

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/748231.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

读AI新生:破解人机共存密码笔记13有益机器

1. 标准模型 1.1. 我们能控制一个从外太空来的超级智能实体的概率几乎为零 1.2. 随着根据标准模型设计的机器变得更加智能,以及它们的行动范围遍及全球,关闭机器这种方法越来越不可行 1.2.1. 机器将会追求它们自己的目标,无论目标错得多么…

禁止浏览器对input的自动填充和填充提示(适用于谷歌、火狐、Edge(原IE浏览器)等常见浏览器)

目录 1.要解决的问题2.一技能:原生属性,小试牛刀3.二技能:傀儡input,瞒天过海4.三技能:JavaScript出击,直接开大 写在前面: 如有转载,务必注明出处,否则后果自负。 1.要解…

Java | Leetcode Java题解之第200题岛屿数量

题目&#xff1a; 题解&#xff1a; class Solution {void dfs(char[][] grid, int r, int c) {int nr grid.length;int nc grid[0].length;if (r < 0 || c < 0 || r > nr || c > nc || grid[r][c] 0) {return;}grid[r][c] 0;dfs(grid, r - 1, c);dfs(grid, r…

Pytorch实战(一):LeNet神经网络

文章目录 一、模型实现1.1数据集的下载1.2加载数据集1.3模型训练1.4模型预测 LeNet神经网络是第一个卷积神经网络&#xff08;CNN&#xff09;&#xff0c;首次采用了卷积层、池化层这两个全新的神经网络组件&#xff0c;接收灰度图像&#xff0c;并输出其中包含的手写数字&…

STM32之IIC(软件)

介绍 IIC &#xff08; 又称为 I2C 或 IC &#xff09;是一种串行通信协议&#xff0c; IIC使用两根线路来进行通信&#xff1a; 串行数据线&#xff08;SDA&#xff09; 和 串行时钟线&#xff08;SCL&#xff09; 。 SDA 线上的数据在 SCL 线的时钟信号下进行 同步传输。 主…

安宝特方案 | AR术者培养:AR眼镜如何帮助医生从“看”到“做”?

每一种新药品的上市都需要通过大量的临床试验&#xff0c;而每一种新的手术工具在普及使用之前也需要经过反复的实践和验证。医疗器械公司都面临着这样的挑战&#xff1a;如何促使保守谨慎的医生从仅仅观察新工具在手术中的应用&#xff0c;转变为在实际手术中实操这项工具。安…

centos7迁移部分成功

早闻CentOS不再维护的消息&#xff0c;确实有些遗憾&#xff0c;毕竟这个系统好用又简单&#xff0c;已经成为了我们工作中的一种习惯。然而&#xff0c;2024年6月30日这一天如约而至&#xff0c;CentOS 7停止维护后&#xff0c;随之而来的安全漏洞又该如何防范&#xff1f;系统…

Stirling-PDF 安装和使用教程

PDF (便携式文档格式) 目前已经成为了文档交换和存储的标准。然而&#xff0c;找到一个功能全面、安全可靠、且完全本地化的 PDF 处理工具并不容易。很多在线 PDF 工具存在隐私和安全风险&#xff0c;而桌面软件往往价格昂贵或功能有限。那么&#xff0c;有没有一种解决方案能够…

Linux安装JDk教程

&#x1f4d6;Linux安装JDk教程 ✅下载✅安装 ✅下载 官方Oracle地址&#xff1a;https://www.oracle.com/java/technologies/downloads/archive/ 123云盘&#xff1a;https://www.123pan.com/s/4brbVv-JdmWA.html ✅安装 1.上传安装包jdk-17_linux-x64_bin.tar.gz到指定位…

java易错题型(复习必看)

java易错题型&#xff1a; 下列符号中&#xff0c;哪个用于分隔throws关键字抛出的多个异常 逗号&#xff0c; Java中用来声明一个方法可能抛出某种异常的关键字是throw 对于catch子句的排列&#xff0c;下列哪种是正确的&#xff1a;子类异常在先&#xff0c;父类异常在后&a…

解决“Duplicate keys detected: ‘ ‘.This may cause an update error.”问题

问题原因 出现“Duplicate keys detected”的错误&#xff0c;通常表示在v-for指令中使的:key绑定值有重复。 如果前端是静态数据&#xff0c;一般能自我避免:key绑定值有重复。如果前端是绑定的动态数据&#xff0c;那么需要另外提供一个唯一的键。 在这个例子中&#xff0c…

CV每日论文--2024.6.26

1、StableNormal: Reducing Diffusion Variance for Stable and Sharp Normal 中文标题&#xff1a;StableNormal&#xff1a;减少扩散方差以实现稳定且锐利的法线 简介&#xff1a;本文介绍了一种创新解决方案&#xff0c;旨在优化单目彩色输入&#xff08;包括静态图片与动态…

糖与蛋白质的“隐秘对话”:DeepGlycanSite如何揭示生命之谜

在生命的复杂舞台上&#xff0c;糖类与蛋白质之间的相互作用犹如一场精心编排的舞蹈&#xff0c;其背后的每一个细微动作都可能对生物体的生理与病理过程产生深远影响。然而&#xff0c;糖类分子的多样性和复杂性&#xff0c;使得科学家们对糖-蛋白质结合位点的识别和研究充满了…

数据预处理功能教程,上传文件生成知识库 | Chatopera

如何快速的生成高质量的知识库&#xff1f; 数据预处理功能教程 | Chatopera 云服务低代码定制聊天机器人 关于 Chatopera Chatopera 云服务重新定义聊天机器人&#xff0c;https://bot.chatopera.com 定制智能客服、知识库、AI 助手、智慧家居等智能应用&#xff0c;释放创新…

图形化用户界面-java头歌实训

图形化用户界面 import java.awt.*; import javax.swing.*; public class GraphicsTester extends JFrame { public GraphicsTester() { super("Graphics Demo"); setSize(480, 300); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public void paint…

Node.js 个人博客

关于该博客 这是一个自己搭建的简易的博客&#xff0c;用于记录一些学习笔记和技术分享。在大四毕业时完成了第一个版本&#xff0c;后续会不断完善和更新。欢迎大家提出宝贵意见和建议。 详细介绍在 blog/posts/博客/博客搭建.md 中: https://github.com/ximingx/blog/blob/m…

php goto解密脚本源码

php goto解密脚本源码 源码下载&#xff1a;https://download.csdn.net/download/m0_66047725/89426171 更多资源下载&#xff1a;关注我。

【Java Web】Servlet控制器

目录 一、Servlet简介 二、Servlet运行流程 三、Servlet开发流程 四、Servlet-api.jar包导入和Content-Type问题 4.1 Servlet-api.jar导入问题 4.2 Http报文头中的Content-Type属性 五、Servlet_url-pattern请求映射路径设置 5.1 url-pattern方式 5.2 注解方式配置servlet 六、…

Linux系统之nice命令的基本使用

Linux系统之nice命令的基本使用 一、nice命令介绍1.1 nice命令简介1.2 进程优先级介绍 二、nice命令基本语法2.1 nice命令的help帮助信息2.2 nice命令选项解释 三、nice命令的基本使用3.1 查看进程优先级3.2 使用nice启动进程3.3 提高优先级 四、注意事项 一、nice命令介绍 1.…

【unity笔记】七、Mirror插件使用

一、简介 Mirror 是一个用于 Unity 的开源多人游戏网络框架&#xff0c;它提供了一套简单高效的网络同步机制&#xff0c;特别适用于中小型多人游戏的开发。以下是 Mirror 插件的一些关键特点和组件介绍&#xff1a; 简单高效&#xff1a;Mirror 以其简洁的 API 和高效的网络…