如何理解sparse.csr_matrix
CSR方法採取按行壓縮的辦法, 將原始的矩陣用三個數組進行表示
和大家分享下我怎樣理解的
from scipy import sparsedata = 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中配對列索引,然後構造矩陣。
推薦閱讀:
※RNN(循環神經網路)-2
※全面理解word2vec
※【機器學習】監督學習技巧整理概述
※機器學習中的Optimal Transport及相關問題:(二)計算方法