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中配對列索引,然後構造矩陣。