针对特殊矩阵的压缩存储结构:
1 含有大量相同元素数据的矩阵
2 含有大量0元素的矩阵,比如稀疏矩阵,上,下三角矩阵
针对以上矩阵,数据结构压缩存储思想是:矩阵中的相同数据元素(包括0元素)只存储1个。
本次主要讲解稀疏矩阵存储放方式。
非0元素很少(≤ 5%)且分布无规律。
压缩存储稀疏矩阵的方法是:只存储矩阵中的非 0 元素,与前面的存储方法不同,稀疏矩阵非 0 元素的存储需同时存储该元素所在矩阵中的行标和列标。
对于稀疏矩阵的存储,为了达到压缩的目的(节省存储空间),只存储非0元素值,但是也要保留非零元素的位置,方便恢复.所以,我们存储时不仅存储非零元素值,同时存储其坐标位置(row,column). 针对这两者的存储,会出现不同的设计方案.这里主要介绍COO,CSR和CSC存储格式.
COO格式是将矩阵中的非零元素以坐标的方式存储。例如下面的邻接矩阵,我们可以用两个长度为n的整数数组分别表示行列索引,以及用另一个长度为n的实数数组表示矩阵非零元素。其中n为矩阵中非0元素个数。具体如下图所示:
row indices: values数组中对应元素的行下标;
column indices: values数组中对应元素的列下标;
values: 矩阵中的非零元素的数值;
对于COO格式的一种改进就是CSR格式,这种格式要求矩阵元按行顺序存储,每一行中的元素可以乱序存储。那么对于每一行,就不需要记录所有元素的行指标。只需要用一个指针表示每一行元素的起始位置即可。以下图为例,具体包含以下数据结构:
row offsets: 行偏移量,包含 rows+1 个值,其中 rows 是指矩阵的总行数。前 rows 个元素表示每一行第一个非零元素在values数组中的偏移量,最后一个元素表示矩阵中非零元素的个数;
column indices: values数组中对应元素的列下标;
values: 矩阵中的非零元素的数值
CSC是按列来存储一个稀疏矩阵的,其原理与CSC类似。具体包含以下数据结构:
column offsets: 列偏移量,包含 columns+1 个值,其中 columns 是指矩阵的总列数。前columns 个元素表示每一列第一个非零元素在values数组中的偏移量,最后一个元素表示矩阵中非零元素的个数;
row indices: values数组中对应元素的行下标;
values: 矩阵中的非零元素的数值;