240626_昇思学习打卡-Day8-稀疏矩阵
240626_昇思学习打卡-Day8-稀疏矩阵
稀疏矩阵
在一些应用场景中,比如训练二值化图像分割时,图像的特征是稀疏的,使用一堆0和极个别的1表示这些特征即费事又难看,此时就可以使用稀疏矩阵。通过参考大佬博文,结合个人理解,记录如下:
CSR(Compressed Sparse Row Format)
CSR矩阵通过使用三个一维数组来存储矩阵,row,column和value(各作者可能叫法不同,实际意义相同)

假如我们有一个稀疏矩阵
[ 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

对于一个稀疏矩阵
[ 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)
打卡图片:

相关文章:
240626_昇思学习打卡-Day8-稀疏矩阵
240626_昇思学习打卡-Day8-稀疏矩阵 稀疏矩阵 在一些应用场景中,比如训练二值化图像分割时,图像的特征是稀疏的,使用一堆0和极个别的1表示这些特征即费事又难看,此时就可以使用稀疏矩阵。通过参考大佬博文,结合个人理…...
Docker: 使用容器化数据库
使用容器化数据库 使用本地容器化数据库提供了灵活性和简易的设置,使您能够在不需要传统数据库安装开销的情况下,紧密模拟生产环境。Docker 简化了这一过程,只需几条命令就可以在隔离的容器中部署、管理和扩展数据库。 在本指南中,您将学习如何: 运行本地容器化数据库访…...
Oracle对用户敏感数据进行编码处理
由于系统运行时间比较长,没有对用户的身份证号、邮箱、手机号进行脱敏处理,后期对数据进行了编码。 更新表数据 sql UPDATE sys_staff SET MOBIL_PHONE CASEWHEN MOBIL_PHONE IS NULL THEN ELSE utl_raw.cast_to_varchar2(utl_encode.base64_encode(ut…...
VXLAN详解:概念、架构、原理、搭建过程、常用命令与实战案例
一、VXLAN概述 1.1 VXLAN的定义 VXLAN(Virtual Extensible LAN,虚拟可扩展局域网)是一种网络虚拟化技术,通过在现有IP网络上创建虚拟网络,使数据中心可以实现大规模的网络隔离和扩展。VXLAN使用MAC-in-UDP封装技术&a…...
Redis-数据类型-Hash
文章目录 1、查看redis是否启动2、通过客户端连接redis3、切换到db3数据库4、插入新数据返回15、获取指定哈希(hash)对象的所有字段(field)名6、获取存储在指定哈希(hash)对象中的所有字段(fiel…...
基于redisson实现tomcat集群session共享
目录 1、环境 2、修改server.xml 3、修改context.xml 4、新增redisson配置文件 5、下载并复制2个Jar包到Tomcat Lib目录中 6、 安装redis 7、配置nginx负载均衡 8、配置测试页面 9、session共享测试验证 前言: 上篇中,Tomcat session复制及ses…...
postgres数据库的流复制
1. 流复制和逻辑复制的差异 逻辑复制和流复制最直观的不同是,逻辑复制支持表级别复制区分点事原理不同 逻辑日志是在wal日志产生的数据库上,由逻辑解析模块对wal日志进行初步的解析,解析结果是ReorderBufferChange(理解为HeapTup…...
Dxf库中的DL_Extrusion类
类DL_Extrusion DL_Extrusion 是 DXF 库中的一个类,用于表示三维实体的扩展信息。在 DXF 文件中,DL_Extrusion 类通常用于表示具有高度的三维图形实体,如立方体、圆柱体等,以及其它具有体积的几何对象。 以下是一个简单的示例代…...
“ONLYOFFICE 8.1版本评测:功能更强大,用户体验更佳”
最新版本的在线编辑器已经发布 ONLYOFFICE在线编辑器的最新版本8.1已经发布,整个套件带来了30多个新功能和432个bug修复。这个强大的文档编辑器支持处理文本文档、电子表格、演示文稿、可填写的表单和PDF,并允许多人在线协作,同时支持AI集成…...
搜维尔科技:【研究】触觉手套比控制器更能带来身临其境、更安全、更高效的虚拟体验
自然交互可提高VR模拟的有效性。研究表明,触觉手套比控制器更能带来身临其境、更安全、更高效的虚拟体验。 以下是验证 医疗培训中的触觉技术 “ 95.5%的参与者表示触摸是 XR 教育的重要组成部分,90.9% 的参与者表示 XR 触觉将提供一个安全的学习场所。…...
【小学期】实体类设计——以学生管理系统为例
项目目录中的位置 将Student.java文件放在src/model目录中,即: student_management │ ├── src │ ├── model │ │ ├── Student.java // 这里是Student实体类 │ │ └── StudentDAO.java │ │ │ ├── view │ │ …...
Java测试类
在Java中,为了编写测试类,通常使用JUnit框架。 1. 首先,创建一个名为Calculator的简单Java类,它包含一个方法add用于计算两个整数的和: public class Calculator {public int add(int a, int b) {return a b;} } 2.…...
python 中面向对象编程:深入理解封装、继承和多态
在本章中,我们将深入探讨Python中的高级面向对象编程概念,包括封装、继承和多态。让我们开始吧! 目录 面向对象简介类和实例属性和方法继承和多态 高级面向对象概念私有变量使用 property使用 __slots__类的特殊成员__doc____call____str____…...
OpenCV练习(2)图像校正
1、傅里叶变换 霍夫变换 直线 角度 旋转2、边缘检测 霍夫变换 直线角度 旋转3、四点透视 角度 旋转4、检测矩形轮廓 角度 旋转 1.目的 实现类似全能扫面王的图像校正功能 2. 基于轮廓提取和透射变换 基于轮廓提取和透射变换的矫正算法更适用于车牌、身份证、人民…...
Excel中的“点选输入”——次级下拉列表创建
在Excel中,用“数据验证”功能可以设置下拉列表,二级下拉列表需要设置公式。 (笔记模板由python脚本于2024年06月16日 18:36:37创建,本篇笔记适合经常使用Excel处理数据的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网:http…...
基于 Spring AOP 实现安全检查
在现代应用程序中,安全性是一个至关重要的方面。通过对系统中的关键操作进行安全检查,可以有效防止未授权的访问和操作。Spring AOP(面向切面编程)提供了一种优雅的方式来实现安全检查,而无需修改业务逻辑代码。本文将…...
【MySQL】数据库事务详解
文章目录 前言1. 事务的定义2. 事务的四个特性2.1 原子性2.2 一致性2.3 隔离性2.4 持久性 3. 事务的并发问题3.1 脏读3.2 不可重复读3.3 幻读3.4 更新丢失 4. 事务的隔离级别5. 事务的使用结语 前言 假设我们现在需要操作数据库进行转账,A 给 B 转账 100 块钱&…...
ubuntu链接mysql
C链接mysql 报错 sudo apt-get update sudo apt-get install libmysqlclient-dev 指令编译 g -o mysql_example mysql_example.cpp -I/usr/include/mysql -lmysqlclient g mysql_test.cpp mysql_config --cflags --libs 安装mysql sudo apt updatesudo apt install mysql-…...
QStyledItemDelegate 和 QItemDelegate 的作用
在Qt中,QStyledItemDelegate和QItemDelegate是用于自定义和控制项视图控件(如QListView、QTableView、QTreeView)中项的显示和编辑的委托类。它们提供了对项的外观和编辑行为的定制能力。尽管它们在功能上有相似之处,但它们之间有…...
3.任务的创建与删除
1.什么是任务? 任务可以理解为进程/线程,创建一个任务,就会在内存开辟一个空间。 任务通常都含有while(1)死循环 2.任务创建与删除相关的函数 3.CUBEMAX相关配置 编辑一个led1闪烁的任务...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...
UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...
376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...
新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...
Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
