Compressed Sparse Row (CSR)行压缩存储相关错误概念纠正

2024-06-13 00:08

本文主要是介绍Compressed Sparse Row (CSR)行压缩存储相关错误概念纠正,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

之前关于矩阵压缩存储的知识都是网上看的,比如这篇

稀疏矩阵存储格式总结+存储效率对比:COO,CSR,DIA,ELL,HYB

里面对ia数组,即行偏移数组的表述是这样的。强调了ia数组中存的是某行的第一个元素的偏移。

今天测试一个国外数学教授开源的AGMG库时才发现如果按之前的理解,还原后的矩阵将和理论上的无法统一。

翻看维基发现,CSR的ia定义并没有说其存储的是第一个元素的偏移信息。ia只是存储了非零行的start索引,这里的start与该行第一个非零元在ja和a中的索引没有关系,其实只是表示了该行中的非零元对应的col值和val值分布在ja[row_start]~ja[row_end],a[row_start]~a[row_end]之间。也就是说,该行中的非零元对应的col和val在ja和a中的顺序可以是随意的,不是必须从左到右,即对应col值从小到大。

以第一幅图的矩阵为例

1700
0280
5039
0604

按之前片面的理解,ia,ja,a只能固定格式如下,(用0做基)

ia: 0 2 4 7 9

ja: 0 1 1 2 0 2 3 1 3

a:  1 7 2 8 5 3 9 6 4

其实还可以这么写

ia: 0 2 4 7 9

ja: 1 0 2 1 3 2 0 3 1

a:  7 1 8 2 9 3 5 4 6

虽然ia一样,但每行的非零元们在ja和a中属于该行的slice中的索引排序不分先后。

之所以出现之前的片面理解是因为我们习惯了矩阵的Z字形读法,都按第一种来了。

这篇关于Compressed Sparse Row (CSR)行压缩存储相关错误概念纠正的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

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

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

JavaScript Array.from及其相关用法详解(示例演示)

《JavaScriptArray.from及其相关用法详解(示例演示)》Array.from方法是ES6引入的一个静态方法,用于从类数组对象或可迭代对象创建一个新的数组实例,本文将详细介绍Array... 目录一、Array.from 方法概述1. 方法介绍2. 示例演示二、结合实际场景的使用1. 初始化二

Python中ModuleNotFoundError: No module named ‘timm’的错误解决

《Python中ModuleNotFoundError:Nomodulenamed‘timm’的错误解决》本文主要介绍了Python中ModuleNotFoundError:Nomodulen... 目录一、引言二、错误原因分析三、解决办法1.安装timm模块2. 检查python环境3. 解决安装路径问题

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

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

如何解决mysql出现Incorrect string value for column ‘表项‘ at row 1错误问题

《如何解决mysql出现Incorrectstringvalueforcolumn‘表项‘atrow1错误问题》:本文主要介绍如何解决mysql出现Incorrectstringv... 目录mysql出现Incorrect string value for column ‘表项‘ at row 1错误报错

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. 实现

C语言中的浮点数存储详解

《C语言中的浮点数存储详解》:本文主要介绍C语言中的浮点数存储详解,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、首先明确一个概念2、接下来,讲解C语言中浮点型数存储的规则2.1、可以将上述公式分为两部分来看2.2、问:十进制小数0.5该如何存储?2.3 浮点

SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法

《SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法》本文主要介绍了SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法,具有一定的参考价值,感兴趣的可以了解一下... 目录方法1:更改IDE配置方法2:在Eclipse中清理项目方法3:使用Maven命令行在开发Sprin

MySQL常见的存储引擎和区别说明

《MySQL常见的存储引擎和区别说明》MySQL支持多种存储引擎,如InnoDB、MyISAM、MEMORY、Archive、CSV和Blackhole,每种引擎有其特点和适用场景,选择存储引擎时需根... 目录mysql常见的存储引擎和区别说明1. InnoDB2. MyISAM3. MEMORY4. A