如何理解sparse.csr_matrix

CSR方法採取按行壓縮的辦法, 將原始的矩陣用三個數組進行表示

和大家分享下我怎樣理解的

from scipy import sparse
data = np.array([1, 2, 3, 4, 5, 6])         #所有的非零數值
indices = np.array([0, 2, 2, 0, 1, 2])      #所有值得列索引
indptr = np.array([0, 2, 3, 6])             #每行的的非零數據 data[i:i+1]
mtx = sparse.csr_matrix((data,indices,indptr),shape=(3,3))
mtx.todense()

1、首先是考慮每行的非零數值,數值在data裏,

data的裏的那幾個,索引在indptr中,注意其中每個值是每行中一個值在data中的索引,

故矩陣第0行 data[ indptr[0]: indptr[1] ], 即data[0:2], 爲數據1,2;

2、這些數值的列索引

由於已經得到矩陣中每行的非零數值,而所有的非零數值的列索引又存在indices中,則把這些數值對應的索引找出來就ok了

indptr[0],indptr[1],對應數值在indices中對應的列索引

故indices[ indptr[0]: indptr[1] ] indices[0:2] , 所以所以爲0, 2

3、對i行

非零數值有data[ indptr[i]: indptr[i+1] ]

非零數值的列索引有indices[ indptr[i]: indptr[i+1] ]

 

總結:三個數組中data最好理解所有非零數值,indices和data值對應每一個數值的列索引,每行的值得索引在indptr中(本行的第一個索引開始,到下一行開頭結束),從而得到每行值的數值個數,再去indices中配對列索引,然後構造矩陣。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章