最为常见的 Sparse Matric 就是 COO 格式,思路非常简单,将矩阵中非零元素的坐标和值分开存储在 3 个数组中,3 个数组长度必须相同,表示有 n 个非零元素。如下图所示:

这种格式有一个问题,就是我们没法快速抽取其中的一行或者一列,如果想办到这一点,就必须遍历整个数组,效率就太低了。因此我们引入了 CSR 和 CSC 格式,分别用于快速访问特定一行或一列的元素。
CSR 分 Index Pointers、Indices、Data 3个数组存储。
Index Pointers:第i个元素记录这个矩阵的第i行的第1个非零值在Data数组的起始位置,第i+1个元素记录这个矩阵的第i行的最后一个非零值在Data数组的终止位置(不包含右边界)。因此,这个矩阵的行数等于len(Index Pointers)-1,第i行非零值的个数等于Index Pointers[i+1]-Index Pointers[i]。Indices:第i个元素记录这个矩阵的第i个非零值的列坐标。Data:第i个元素记录这个矩阵的第i个非零值的具体数值,排列顺序严格按照行优先,列次先。
如下图所示:

CSC 与 CSR 唯一的不同在于列优先,其他规则一模一样。
