如何表示csr中的空行?
假设我们有以下矩阵:

* MATRIX 1 *
a 0 0
0 b 0
0 0 c

val = [ a b c ]
col = [ 0 1 2 ]
row = [ 0 1 2 ] <- makes sense!

—————————————————————

* MATRIX 2 *
a b c
0 0 0
0 0 0

val = [ a b c ]
col = [ 0 1 2 ]
row = [ 0 ] <— makes sense…? but how about…

—————————————————————

* MATRIX 3 *
0 0 0
a b c
0 0 0

val = [ a b c ]
col = [ 0 1 2 ]
row = [ 0 ] <— wait… how do we differentiate between MATRIX 2 and MATRIX 3?

MATRIX 1是直观的,但是我们如何表示MATRIX 2MATRIX 3之间的区别呢?我们用负整数来表示间距吗?
谢谢

最佳答案

看看The Wikipedia pageIA向量(或您称之为“行”)定义为:
阵列IA的长度为m+1它由以下递归定义定义:
Ia[0]=0
ia[i]=ia[i-1]+(原始矩阵第(i-1)行上的非零元素数)
因此,IA的前m个元素将索引存储到m的每行中第一个非零元素的A中,而最后一个元素IA[m]存储NNZ,即A中元素的数量这也可以被认为是在矩阵m的末尾之后的幻象行的第一个元素的a中的索引。原始矩阵的第i行的值从元素a[ia[i]]读取到a[ia[i+1]-1%(两端都包括),即从一行的开始到下一行开始之前的最后一个索引。
因此,在矩阵1中:
row = [0 1 2 3]
在矩阵2中:
row = [0 3 3 3]
在矩阵3中
row = [0 0 3 3]

关于algorithm - 压缩稀疏行(CSR):如何存储空行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43771387/

10-12 15:05