理解稀疏矩阵存储形式
2022.11.3
记录学习dgl库(dgl.graph接口)的时候,遇到稀疏矩阵存储形式作为参数的情况,不太理解。在查阅资料后做下学习记录:
介绍稀疏矩阵的3种存储格式:COO(coordinate format)、CSR(compressed sparse row format)、CSC(compressed sparse column format)
COO:COO格式是将矩阵中的非零元素以坐标的方式存储
COO包含3个数组:
-
Row:记录对应Data中非零元素的行索引
-
Column:记录对应Data中非零元素的列索引
-
Data:记录稀疏矩阵中非零元素值
CSR:要求矩阵元素按行顺序存储,每一行中的元素可以乱序存储
CSR包含三个数组(所有的index从0开始):
-
Index Pointers
共有 矩阵行数+1 个元素,最后一个元素为所有非零元素的数量。前面的元素理解为:第 i 个元素记录了 前 i - 1 行包含的非零元素的数量。第 0 个元素肯定为0,第 1 个元素记录 前 0 行 包含的非零 元素数量(2,第0行非零元素总个数为2),第 2 个元素记录 前 1 行 包含的非零元素数量(3,第0行和第1行非零元素总个数为 3),第 3 个元素记录 前 2 行 包含的非零元素数量(3,第0-2行非零元素总个数为3),依此类推。
-
Indices
理解为第i个元素记录了Data[i]元素的列索引。比如Data第一个元素为8,它的列索引为0,所以该数组第一个元素为0;Data第二个 元素为2,它的列索引为2,所以该数组第一个元素为2,依此类推。
-
Data
用来存储矩阵中的非零元素的值
CSC:按列来存储一个稀疏矩阵,与CSR类似(只不过是按列存储)
CSC包含三个数组(所有的index从0开始):
-
Index Pointers
共有 矩阵列数+1 个元素,最后一个元素为所有非零元素的数量。前面的元素理解为:第 i 个元素记录了 前 i - 1 列行包含的非零元素的数量
-
Indices
理解为第i个元素记录了Data[i]元素的行索引
-
Data
用来存储矩阵中的非零元素的值