Data Structures for Sparse Matrix
稀疏矩阵的数据结构
常见结构
- COO: Coordinate or triplet
- CSR: Compressed Sparse Row
- CSC: Compressed Sparse Column
- DIA: Diagonal
- BSR: Block Sparse Row
COO: coordinate
- 也叫做 triplet 格式
- 最简单和基本的格式,通常用做向其它格式转换的入门格式
- 顺序是任意的
- 保存三列数据:值、行指标、列指标
A:
[[ 1, 0, 0, 2, 0],
[ 3, 4, 0, 5, 0],
[ 6, 0, 7, 8, 9],
[ 0, 0, 10, 11, 0],
[ 0, 0, 0, 0, 12]]
data: [1, 3, 6, 4, 7, 10, 2, 5, 8, 11, 9, 12]
row(i): [0, 0, 1, 1, 1, 2, 2, 2, 2, 3, 3, 4]
col(j): [0, 3, 0, 1, 3, 0, 2, 3, 4, 2, 3, 4]
A[ i[k], j[k] ] = data[k]
CSR: Compressed Sparse Row
- 按行压缩,即coo格式中的数据值、列指标不变,但行指标改成指向这一行开始的列的指标
- 一般来说,Fortran 里使用这种格式
A:
[[ 1, 0, 0, 2, 0],
[ 3, 4, 0, 5, 0],
[ 6, 0, 7, 8, 9],
[ 0, 0, 10, 11, 0],
[ 0, 0, 0, 0, 12]]
data: [1, 3, 6, 4, 7, 10, 2, 5, 8, 11, 9, 12]
row(i): [0, 2, 5, 9, 11, 12]
col(j): [0, 3, 0, 1, 3, 0, 2, 3, 4, 2, 3, 4]
CSC: Compressed Sparse Column
- 按列压缩,与 CSR 类似,不过行列换一下
- c 中常用这种格式
A:
[[ 1, 0, 0, 2, 0],
[ 3, 4, 0, 5, 0],
[ 6, 0, 7, 8, 9],
[ 0, 0, 10, 11, 0],
[ 0, 0, 0, 0, 12]]
data: [1, 3, 6, 4, 7, 10, 2, 5, 8, 11, 9, 12]
row(i): [0, 1, 2, 1, 2, 3, 0, 1, 2, 3, 2, 4]
col(j): [0, 3, 4, 6, 10, 12]
DIA: The Diagonal format
- 按对角线压缩,保存偏移值,负的偏移忽略头元素,正的偏移忽略尾元素
A:
[[ 1., 0., 2., 0., 0.],
[ 3., 4., 0., 5., 0.],
[ 0., 6., 7., 0., 8.],
[ 0., 0., 9., 10., 0.],
[ 0., 0., 0., 11., 12.]]
data:
[[ 3., 6., 9., 11., nan],
[ 1., 4., 7., 10., 12.],
[nan, nan, 2., 5., 8.]]
offsets: [-1, 0, 2]
BSR: Block matrices
- 类似 CSR,只不过每个行列指的是一个小的矩阵,这些小矩阵大小都相等
scipy 格式
- 很容易使用,参考 scipy - sparse
评论
Comments powered by Disqus