系数矩阵的行压缩存储(CSR/CRS), 列压缩存储CCS

2024-06-16 03:48

本文主要是介绍系数矩阵的行压缩存储(CSR/CRS), 列压缩存储CCS,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

转载地址:http://blog.csdn.net/bigpiglet_zju/article/details/20791881

稀疏矩阵(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的平方个单元。

      //ps:这的n好像指的是:方阵的行/列

    

        看一个例子:

        矩阵A定义为



        其CSR格式由三个数组定义为:


        注意其中row_ptr数组的最后一个元素为20(19+1),因为矩阵A的非零元素为19。

Compressed Column Storage

Analogous to CRS, there is compressed column storage (CCS), which is also called the Harwell-Boeing sparse matrix format [139]. The CCS format is identical to the CRS format except that the columns of $A$ are stored (traversed) instead of the rows. In other words, the CCS format is the CRS format for $A^T$.

The CCS format is specified by the $3$ arrays {valrow_indcol_ptr}, where row_ind stores the row indices of each nonzero, and col_ptr stores the index of the elements in val which start a column of $A$. The CCS format for the matrix $A$ in (10.1) is given by

val103397848$\cdots$ 92313-1  
row_ind12423563$\cdots$ 56256  


col_ptr14810131720


参考:
1. Compressed Row Storage
http://web.eecs.utk.edu/~dongarra/etemplates/node373.html

2.  Compressed Column Storage

http://www.netlib.org/utk/people/JackDongarra/etemplates/node374.html

3. Sparse Matrix Compression Formats
http://www.cs.colostate.edu/~mroberts/toolbox/c++/sparseMatrix/sparse_matrix_compression.html


这篇关于系数矩阵的行压缩存储(CSR/CRS), 列压缩存储CCS的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1065397

相关文章

使用Python实现矢量路径的压缩、解压与可视化

《使用Python实现矢量路径的压缩、解压与可视化》在图形设计和Web开发中,矢量路径数据的高效存储与传输至关重要,本文将通过一个Python示例,展示如何将复杂的矢量路径命令序列压缩为JSON格式,... 目录引言核心功能概述1. 路径命令解析2. 路径数据压缩3. 路径数据解压4. 可视化代码实现详解1

关于MongoDB图片URL存储异常问题以及解决

《关于MongoDB图片URL存储异常问题以及解决》:本文主要介绍关于MongoDB图片URL存储异常问题以及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录MongoDB图片URL存储异常问题项目场景问题描述原因分析解决方案预防措施js总结MongoDB图

SpringBoot使用GZIP压缩反回数据问题

《SpringBoot使用GZIP压缩反回数据问题》:本文主要介绍SpringBoot使用GZIP压缩反回数据问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot使用GZIP压缩反回数据1、初识gzip2、gzip是什么,可以干什么?3、Spr

Java图片压缩三种高效压缩方案详细解析

《Java图片压缩三种高效压缩方案详细解析》图片压缩通常涉及减少图片的尺寸缩放、调整图片的质量(针对JPEG、PNG等)、使用特定的算法来减少图片的数据量等,:本文主要介绍Java图片压缩三种高效... 目录一、基于OpenCV的智能尺寸压缩技术亮点:适用场景:二、JPEG质量参数压缩关键技术:压缩效果对比

SpringBoot3实现Gzip压缩优化的技术指南

《SpringBoot3实现Gzip压缩优化的技术指南》随着Web应用的用户量和数据量增加,网络带宽和页面加载速度逐渐成为瓶颈,为了减少数据传输量,提高用户体验,我们可以使用Gzip压缩HTTP响应,... 目录1、简述2、配置2.1 添加依赖2.2 配置 Gzip 压缩3、服务端应用4、前端应用4.1 N

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处

一文详解SpringBoot响应压缩功能的配置与优化

《一文详解SpringBoot响应压缩功能的配置与优化》SpringBoot的响应压缩功能基于智能协商机制,需同时满足很多条件,本文主要为大家详细介绍了SpringBoot响应压缩功能的配置与优化,需... 目录一、核心工作机制1.1 自动协商触发条件1.2 压缩处理流程二、配置方案详解2.1 基础YAML

Python实现将MySQL中所有表的数据都导出为CSV文件并压缩

《Python实现将MySQL中所有表的数据都导出为CSV文件并压缩》这篇文章主要为大家详细介绍了如何使用Python将MySQL数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到... python将mysql数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到另一个

Oracle存储过程里操作BLOB的字节数据的办法

《Oracle存储过程里操作BLOB的字节数据的办法》该篇文章介绍了如何在Oracle存储过程中操作BLOB的字节数据,作者研究了如何获取BLOB的字节长度、如何使用DBMS_LOB包进行BLOB操作... 目录一、缘由二、办法2.1 基本操作2.2 DBMS_LOB包2.3 字节级操作与RAW数据类型2.

Java实现数据库图片上传与存储功能

《Java实现数据库图片上传与存储功能》在现代的Web开发中,上传图片并将其存储在数据库中是常见的需求之一,本文将介绍如何通过Java实现图片上传,存储到数据库的完整过程,希望对大家有所帮助... 目录1. 项目结构2. 数据库表设计3. 实现图片上传功能3.1 文件上传控制器3.2 图片上传服务4. 实现