BSR块压缩存储是CSR行压缩存储的升级变形;可以降低图数据存储空间。
有以下图的矩阵表示:
一、CSR表示
rowIndex = [0 4 8 10 12 16 20]
columns = [0 1 2 3 | 0 1 2 3 | 2 3 | 2 3 | 2 3 4 5 | 2 3 4 5]
values = [1 0 6 7 | 2 1 8 2 | 1 4 | 5 1 | 4 3 7 2 | 0 0 0 0]
|rowIndex|+|columns|+|values|= 7 + 20 + 20 = 47
二、BSR 表示
假设:块(Block)的大小=2;
rowIndex = [0 2 3 5]
columns = [0 1 | 1 | 1 2]
values = [1 0 2 1 | 6 7 8 2 | 1 4 5 1 | 4 3 0 0 | 7 2 0 0]
BSR:****|rowIndex|+|columns|+|values|= 7 + 20 + 20 = 47
以块为单位:
rowIndex[i]: 记录每个块行i的偏移量,i ∈ [0, blockrows]。
rowIndex[i+1] - rowIndex[i] 表示:第i块行中非零块数;
例如rowIndex[1] - rowIndex[0] = 2 - 0 =2;表示第0行有2个块;
rowIndex[blockrows] 表示: 非零块的总个数。
例如rowIndex[3]=5;表示总共有5个块;
columns[i] 表示第i个非零块的列坐标;columns的大小(长度) 与非零块的总个数相同;
columns[2]=1表示第3个块在第1列(以块为单位);
values 按行存储非零块的值。
三、空间节省:
CSR:****|rowIndex|+|columns|+|values|= 7 + 20 + 20 = 47
BSR:****|rowIndex|+|columns|+|values|= 7 + 20 + 20 = 47
r =(47-29)/ 47 = 38.3%