【Eigen笔记】3.1 稀疏矩阵操作

2023-05-16

3.1稀疏矩阵操作

参考: https://eigen.tuxfamily.org/dox-devel/group__TutorialSparse.html

稀疏矩阵就是绝大部分元素都为0的矩阵。

稀疏矩阵与稠密矩阵不仅数据结构上不同,可用的算法也是不同的。

我们首先看数据结构

数据结构

假设我们要存储如下矩阵

0	3	0	0	0
22	0	0	0	17
7	5	0	1	0
0	0	0	0	0
0	0	14	0	8

采用压缩列存储方案(Compressed Column Storage)存储。这点Youssad的Iterative Methods一书中有更详尽的描述。

我们需要存储的是如下四个数组:

  1. 值 Value
  2. 行号 InnerIndices
  3. 每列起始索引 OuterStarts
  4. 该列非0值个数 InnerNNZs

注:

  • 在Eigen中,默认为列主序,inner代表的是一列,故Inner Indices是行号。
  • NNZ代表Number of Non-Zeros
  • OuterStarts存储的起始索引是对应Value和InnerIndices中的索引,而非原本矩阵的索引。

故实际存储的数据为

Values:			22	7	_	3	5	14	_	_	1	_	17	8
InnerIndices:	1	2	_	0	2	4	_	_	2	_	1	4
OuterStarts:	0	3	5	8	10	12
InnerNNZs:		2	2	1	1	2	

例子:

一列一列地看

  • 第一列:
    • 第一列有22和7两个非零值,22对应行号为1,7对应行号为2。
    • 第一列的第一个元素22,在Values和InnerIndices数组中的索引是0,故OuterStarts=0.
    • 这一列非零数InnerNNZs为2,故从22到7是第一列。
  • 第二列
    • 第二列有3和5两个非零值,3对应的行号为0,5对应行号为2
    • 第二列的第一个元素3,在Values和InnerIndices数组中的索引是3,故OuterStarts=3.
    • 这一列非零数InnerNNZs为2,故从3到5是第二列。

我们注意到有些多余的空间。这是为了将来插入新元素时快速插入留的空位。

可以采用SparseMatrix::makeCompressed()来释放多余的空间。这种叫做压缩模式

释放之后存储的数组为

Values:			22	7	3	5	14	1	17	8
InnerIndices:	1	2	0	2	4	2	1	4
OuterStarts:	0	2	4	5	6	8

我们注意到,由于不再有多余的空间,因此也不需要存储InnerNNZs了。因为InnerNNZs[j] == OuterStarts[j+1] - OuterStarts[j]

另外,Eigen大多数与外部库交互的包装类,返回的都是压缩模式的矩阵。但是一旦我们插入新的元素,就自动会转化为非压缩模式。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Eigen笔记】3.1 稀疏矩阵操作 的相关文章

  • 解决svn文件图标不显示

    1 首先检查svn设置中是否设置图标显示 2 win 43 R xff0c 输入regedit xff0c 调出注册表信息 xff0c 按下Ctrl 43 F 在注册表里搜索 ShellIconOverlayIdentifiers 查看是否
  • vue父组件传值给子组件不生效

    先上代码 父组件 lt hj subjects v if 61 34 showHjSubect 34 list 61 34 subjectsList 34 64 getHjSubjects 61 34 getHjSubject 34 gt
  • vue下载pdf为空问题解决

    后端返回文件流 xff0c vue下载到本地 请求时需要设置responseType blob 否则下载pdf文件打开会为空 下载方法代码如下 xff1a url请求参数 params请求参数 filename文件名称 span class
  • vue使用iframe嵌入html

    1 本地html文件的存放 在根目录下找到public文件夹 xff0c 在public文件夹下创建static文件夹 xff0c 把html文件放入static文件夹中 2 使用iframe标签引入html文件 span class to
  • 解决Android运行过程中出现的NoClassDefFoundError

    1 先说一下出现上述问题的经过 出现这个问题是集成一个aar之后 xff0c 编译过程中没有问题 在安装运行的时候出现上述错误 然后百度各种解决办法都无济于事 但是有了一点思路 报错位置 在自定义的application中初始化的aar导致
  • 前端将base64图片格式转化为文件流并传给后端

    base64图片格式 xff1a base64图片格式转化为文件流代码 xff1a data base64图片格式字符串 filename xff1a 文件名称 base64toFile span class token punctuati
  • IP地址分类

    一 xff1a IP地址 1概念 xff1a a IP地址是指互联协议地址 xff0c 又译为网际协议地址 b IP地址是提供的IP协议一种统一地址格式 xff0c 它为互联网上的每一个网络和每一台主机分配一个逻辑地址 xff0c 以此来屏
  • vue项目打包npm run build报错

    报错如下图 xff1a 删除根目录下的package lock json和node modules文件 xff0c 再运行npm i命令 npm i命令运行完成后 xff0c 再输入npm run build命令 命令执行成功后 xff0c
  • SpringBoot运行报o.s.b.d.LoggingFailureAnalysisReporter

    报错截图 xff1a 报错原因 xff1a 从上图Description中可以看出 xff0c 报错原因是端口被占用 报错解决方法 xff1a 找到application yml文件 xff0c 修改端口为8081 xff08 或者关闭80
  • ROS教程 Gazebo仿真(3)-摄像头

    接上一篇 ROS教程 Gazebo仿真 2 激光雷达 https blog csdn net weixin 43928944 article details 115904044 配置摄像头 camera sensors xacro span
  • Ubuntu18 远程桌面 VNC-Server 配置[亲测]

    安装vino sudo apt update sudo apt install vino 设Enable VNC 服务 sudo ln span class token operator span s span class token pu
  • redis redisson 集合使用示例(RList、Rset、RMap)

    redis redisson 集合操作 相关类及接口 Rlist xff1a 链表 public interface RList lt V gt extends List lt V gt RExpirable RListAsync lt V
  • Python数据分析、挖掘常用工具

    Python语言 xff1a 简要概括一下Python语言在数据分析 挖掘场景中常用特性 xff1a 列表 xff08 可以被修改 xff09 xff0c 元组 xff08 不可以被修改 xff09 字典 xff08 lt k v gt 结
  • 17个新手常见Python运行时错误

    对于刚入门的Pythoner在学习过程中运行代码是或多或少会遇到一些错误 xff0c 刚开始可能看起来比较费劲 随着代码量的积累 xff0c 熟能生巧当遇到一些运行时错误时能够很快的定位问题原题 下面整理了常见的17个错误 xff0c 希望
  • Python 正在吞噬世界...

    Python is eating the world 这篇关于Python长文火了 从Python的创建过程 xff0c 到Python成为一个无所不在的语言 xff0c 究竟经历了一个怎样的过程 xff1f 美国科技媒体ZDNet记者Ni
  • 解决android studio错误提示信息乱码问题

    android studio在编译过程中 xff0c 如果出现错误会在messages界面给出提示 xff0c 但是有的时候会出现乱码的问题 导致根本看不出来是什么问题 这时候只要做以下设置就能解决乱码问题 xff0c IDE也会将出现的错
  • Python为什么是编程语言中最skr的?

    Python的出现让计算机编程语言不再是生僻的专业技能 xff0c 而是常人都能学习和使用的万金油 经济学人 xff08 Economist xff09 近日对Python的一篇专题报道 xff0c 揭秘了这一把计算机思维带入寻常百姓家的神
  • PLC有几种编程语言?各有什么特点?

    之前我们简单学习了PLC的一些基本知识 今天我们再来了解PLC的编程语言吧 IEC 1131 3的编程语言是IEC工作组对世界范围的PLC厂家的编程语言合理地吸收 借鉴的基础上形成的一套针对工业控制系统的国际编程语言标准 xff0c 它不但
  • 几种主流编程语言

    著名风险投资家Marc Andreessen曾说 xff1a 软件正在吞噬整个世界 没错 xff0c 开发软件的公司越来越多了 xff0c 会编程的人也越来越多了 xff0c 现在的世界上光编程语言就达成千上万种 xff0c 尽管这其中只有
  • VB编程语言基础知识点总结(转)

    Visual Basic xff08 简称VB xff09 是Microsoft公司开发的一种通用的基于对象的程序设计语言 xff0c 为结构化的 模块化的 面向对象的 包含协助开发环境的事件驱动为机制的可视化程序设计语言 海风教育投诉 海

随机推荐