2017-05-03 98 views
1

你如何表示CSR中的空行?壓縮稀疏行(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 1 and MATRIX 2? 

MATRIX 1是直觀的,但是我們如何代表MATRIX 2MATRIX 3之間的區別?我們是否使用負整數作爲間距?

感謝

+0

你有什麼語言/工具? –

+0

我在問一般的理論。如果有幫助,C會很好。 –

回答

2

看看The Wikipedia page。所述IA矢量(或作爲你稱之爲「行」),定義爲:

陣列IA是+ 1,它是由該遞歸定義定義長度爲m:

  • IA [ 0] = 0
  • IA [i] = IA [i-1] +(原始矩陣中第(i-1)行上的非零元素的數量)
  • 因此,IA將索引存儲在M的每一行中的第一個非零元素的A中,並且最後一個元素IA [m]存儲NNZ,A中元素的數量,這也可以被認爲是作爲幻像行的第一個元素的索引,恰好超過矩陣M的末端。原始矩陣的第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]