稀疏向量压缩存储格式
仅存储稀疏矩阵中的非零元素。假设有稀疏矩阵a,a中有nz个非零元素:a(k1), a(k2), ..., a(knz)。
存储时,用两个数组来存储矩阵a的信息:
x(1)=a(k1), x(2)=a(k2), ..., x(nz)=a(knz)
indx(1)=k1, indx(2)=k2, ..., indx(nz)=knz
压缩存储格式可以节省计算机内存和运行时间。
稀疏矩阵存储格式
CSR(Compressed Sparse Row,行序稀疏矩阵压缩)格式包含四项要素:值(value)、列(column)、索引B(pointerB)和索引E(pointerE)。
表4-2描述了稀疏矩阵A中四项要素的含义。
表1 稀疏矩阵A中四项要素说明参数名
|
描述
|
值(value)
|
- A矩阵中的非零元素,存储方式为行主序。
- 数组长度与A中非零元素个数相等。
|
列(column)
|
- value数组中第i个元素value[i]在矩阵A中的列序号。
- 数组长度与A中非零元素个数相等。
|
索引B(pointerB)
|
- 在基1索引中,pointerB(j)-pointerB(1)+1表示A矩阵第j行第一个非零元素在value数组中的索引。
- 在基0索引中,pointerB(j)-pointerB(0)表示A矩阵第j行第一个非零元素在value数组中的索引。
- 数组长度与A的行数相等。
|
索引E(pointerE)
|
- 在基1索引中,pointerE(j)-pointerB(1)表示A矩阵第j行最后一个非零元素在value数组中的索引。
- 在基0索引中,pointerE(j)-pointerB(0)-1表示A矩阵第j行最后一个非零元素在value数组中的索引。
- 数组长度与A的行数相等。
|
假设矩阵A为:
,则A的CSR格式如表2所示。
表2 矩阵A的CSR格式矩阵
|
索引方式
|
CSR格式
|

|
基1索引
|
value = [2, -3, 7, 1, -6, 8, -4, 5, 9]
column = [1, 2, 4, 3, 4, 1, 3, 4, 1]
pointerB = [1, 4, 6, 9]
pointerE = [4, 6, 9, 10]
|
基0索引
|
value = [2, -3, 7, 1, -6, 8, -4, 5, 9]
column = [0, 1, 3, 2, 3, 0, 2, 3, 0]
pointerB = [0, 3, 5, 8]
pointerE = [3, 5, 8, 9]
|