稀疏矩阵Compressed Row Storage存储格式
2014-03-08 18:34
477 查看
稀疏矩阵(Sparse Matrix)由于有很多0,为了节省空间,一般压缩存储。通常只需要保存非零元素及其位置即可。
下面介绍Compressed Row Storage(CRS)格式或者称为 Compressed sparse row(CSR)格式,由名称可见,该格式是把行的信息压缩存储了,只显式保留每行第一个非零元素的位置,具体在例子中可以看到。
假设有稀疏矩阵A,我们需要创建三个数组,一个浮点型数组val,另外两个为整型数组(col_ind, row_ptr)。
val数组,大小为矩阵A的非零元素的个数,保存矩阵A的非零元素(按从上往下,从左往右的行遍历方式访问元素)。
col_ind数组,和val数组一样,大小为矩阵A的非零元素的个数,保存val数组中元素的列索引。其数学表示为:
如果val(k)=a(i,j),则col_ind(k)=j。
row_ptr数组,大小为矩阵A的行数,保存矩阵A的每行第一个非零元素在val中的索引。其数学表示为:
如果val(k)=a(i,j),则row_ptr(i)<= k < row_ptr(i+1)。
按照惯例,一般定义row_ptr(n+1) = nnz + 1,而nnz是A中非零元素的个数。
该方法可以节省很多空间,只需要2nnz + n + 1个存储单元,而不是n的平方个单元。
看一个例子:
矩阵A定义为
其CSR格式由三个数组定义为:
注意其中row_ptr数组的最后一个元素为20(19+1),因为矩阵A的非零元素为19。
参考:
1, Compressed Row Storage
http://web.eecs.utk.edu/~dongarra/etemplates/node373.html
2, Sparse Matrix Compression Formats
http://www.cs.colostate.edu/~mroberts/toolbox/c++/sparseMatrix/sparse_matrix_compression.html
下面介绍Compressed Row Storage(CRS)格式或者称为 Compressed sparse row(CSR)格式,由名称可见,该格式是把行的信息压缩存储了,只显式保留每行第一个非零元素的位置,具体在例子中可以看到。
假设有稀疏矩阵A,我们需要创建三个数组,一个浮点型数组val,另外两个为整型数组(col_ind, row_ptr)。
val数组,大小为矩阵A的非零元素的个数,保存矩阵A的非零元素(按从上往下,从左往右的行遍历方式访问元素)。
col_ind数组,和val数组一样,大小为矩阵A的非零元素的个数,保存val数组中元素的列索引。其数学表示为:
如果val(k)=a(i,j),则col_ind(k)=j。
row_ptr数组,大小为矩阵A的行数,保存矩阵A的每行第一个非零元素在val中的索引。其数学表示为:
如果val(k)=a(i,j),则row_ptr(i)<= k < row_ptr(i+1)。
按照惯例,一般定义row_ptr(n+1) = nnz + 1,而nnz是A中非零元素的个数。
该方法可以节省很多空间,只需要2nnz + n + 1个存储单元,而不是n的平方个单元。
看一个例子:
矩阵A定义为
其CSR格式由三个数组定义为:
注意其中row_ptr数组的最后一个元素为20(19+1),因为矩阵A的非零元素为19。
参考:
1, Compressed Row Storage
http://web.eecs.utk.edu/~dongarra/etemplates/node373.html
2, Sparse Matrix Compression Formats
http://www.cs.colostate.edu/~mroberts/toolbox/c++/sparseMatrix/sparse_matrix_compression.html
相关文章推荐
- “传奇”图象数据存储方式
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#数据结构揭秘一
- SQL Server误区30日谈 第18天 有关FileStream的存储,垃圾回收以及其它
- 使用UglifyJS合并/压缩JavaScript的方法
- 高性能WEB开发 JS、CSS的合并、压缩、缓存管理
- 脚本分析、压缩、混淆工具 JSA新版本发布,压缩效率提高大约10%
- 发布一个高效的JavaScript分析、压缩工具 JavaScript Analyser
- PHP 存储文本换行实现方法
- 注册表中存储数据库链接字符串的方法
- 在IIS上启用Gzip压缩 (HTTP压缩)第1/3页
- javascript实现的样式表(CSS) 格式整理与压缩
- 如何使用Matrix对bitmap的旋转与镜像水平垂直翻转
- php zlib压缩和解压缩swf文件的代码
- YUI Compressor压缩JavaScript原理及微优化
- java数据结构和算法学习之汉诺塔示例
- python zip文件 压缩
- Java数据结构之简单链表的定义与实现方法示例
- CSS代码格式化和压缩的方法与技巧
- qqwry.dat的数据结构图文解释第1/2页