稀疏矩阵存储方式总结

针对特殊矩阵的压缩存储结构:

     1 含有大量相同元素数据的矩阵

      2 含有大量0元素的矩阵,比如稀疏矩阵,上,下三角矩阵

针对以上矩阵,数据结构压缩存储思想是:矩阵中的相同数据元素(包括0元素)只存储1个。

本次主要讲解稀疏矩阵存储放方式。

稀疏矩阵

非0元素很少(≤ 5%)且分布无规律。

压缩存储稀疏矩阵的方法是:只存储矩阵中的非 0 元素,与前面的存储方法不同,稀疏矩阵非 0 元素的存储需同时存储该元素所在矩阵中的行标和列标。

对于稀疏矩阵的存储,为了达到压缩的目的(节省存储空间),只存储非0元素值,但是也要保留非零元素的位置,方便恢复.所以,我们存储时不仅存储非零元素值,同时存储其坐标位置(row,column). 针对这两者的存储,会出现不同的设计方案.这里主要介绍COO,CSR和CSC存储格式.

  • COO, coordinate format.
  • CSR, compressed sparse row format.
  • CSC, compressed sparse column format.

COO,coordinate format (坐标格式

COO格式是将矩阵中的非零元素以坐标的方式存储。例如下面的邻接矩阵,我们可以用两个长度为n的整数数组分别表示行列索引,以及用另一个长度为n的实数数组表示矩阵非零元素。其中n为矩阵中非0元素个数。具体如下图所示:

稀疏矩阵存储方式总结_第1张图片

 

row indices:  values数组中对应元素的行下标

column indices: values数组中对应元素的列下标

values: 矩阵中的非零元素的数值

CSR,compressed sparse row format (压缩稀疏行格式)

对于COO格式的一种改进就是CSR格式,这种格式要求矩阵元按行顺序存储,每一行中的元素可以乱序存储。那么对于每一行,就不需要记录所有元素的行指标。只需要用一个指针表示每一行元素的起始位置即可。以下图为例,具体包含以下数据结构:

稀疏矩阵存储方式总结_第2张图片

 

row offsets:  行偏移量,包含 rows+1 个值,其中 rows 是指矩阵的总行数。前 rows 个元素表示每一行第一个非零元素在values数组中的偏移量,最后一个元素表示矩阵中非零元素的个数;

column indices: values数组中对应元素的列下标;

values: 矩阵中的非零元素的数值

CSC,compressed sparse column format (压缩稀疏列格式)

CSC是按列来存储一个稀疏矩阵的,其原理与CSC类似。具体包含以下数据结构:

稀疏矩阵存储方式总结_第3张图片

 

column offsets:  列偏移量,包含 columns+1 个值,其中 columns 是指矩阵的总列数。前columns 个元素表示每一列第一个非零元素在values数组中的偏移量,最后一个元素表示矩阵中非零元素的个数;

row indices: values数组中对应元素的行下标;

values: 矩阵中的非零元素的数值;

你可能感兴趣的:(记录,矩阵,矩阵,线性代数,1024程序员节)