Ste*_*sky 7 algorithm matrix sparse-matrix data-structures
你如何在 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?
Run Code Online (Sandbox Code Playgroud)
MATRIX 1是直观的,但是我们如何代表之间的差异MATRIX 2和MATRIX 3?我们是否使用负整数来表示间距?
谢谢
小智 8
看看维基百科页面。该IA载体(或你叫它“行”),被定义为:
数组 IA 的长度为 m + 1。它由以下递归定义定义:
- IA[0] = 0
- IA[i] = IA[i ? 1] +(原始矩阵中第 (i ? 1) 行上的非零元素数)
- 因此,IA的前m个元素存储M的每一行第一个非零元素的A的索引,最后一个元素IA[m]存储A中元素的个数NNZ,也可以认为是在矩阵 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]