之前关于矩阵压缩存储的知识都是网上看的,比如这篇
稀疏矩阵存储格式总结+存储效率对比: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值从小到大。