当前位置: 首页 > news >正文

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

http://www.lryc.cn/news/384069.html

相关文章:

  • Docker: 使用容器化数据库
  • Oracle对用户敏感数据进行编码处理
  • VXLAN详解:概念、架构、原理、搭建过程、常用命令与实战案例
  • Redis-数据类型-Hash
  • 基于redisson实现tomcat集群session共享
  • postgres数据库的流复制
  • Dxf库中的DL_Extrusion类
  • “ONLYOFFICE 8.1版本评测:功能更强大,用户体验更佳”
  • 搜维尔科技:【研究】触觉手套比控制器更能带来身临其境、更安全、更高效的虚拟体验
  • 【小学期】实体类设计——以学生管理系统为例
  • Java测试类
  • python 中面向对象编程:深入理解封装、继承和多态
  • OpenCV练习(2)图像校正
  • Excel中的“点选输入”——次级下拉列表创建
  • 基于 Spring AOP 实现安全检查
  • 【MySQL】数据库事务详解
  • ubuntu链接mysql
  • QStyledItemDelegate 和 QItemDelegate 的作用
  • 3.任务的创建与删除
  • 进程、CPU、MMU与PCB之间的关系
  • 代码随想录算法训练营Day50|1143.最长公共子序列、1035.不相交的线、53.最大子序和、392.判断子序列
  • 国家自然科学基金标书大全(2002-2024)
  • Python代码打包成exe应用
  • CesiumJS【Basic】- #016 多边形面渲染“花了”的问题
  • qt 开发对信号槽进行二次封装,实现信号槽管理接口。
  • 本地项目上传到gitee
  • ONLYOFFICE 8.1版本桌面编辑器测评:超越想象的办公体验!
  • 中介子方程三十四
  • 最新Sublime Text软件安装包分享(汉化版本)
  • AI-智能体基础设施