1. sparse模塊的官方document地址:http://docs.scipy.org/doc/scipy/reference/sparse.html
2. sparse matrix的存儲形式有很多種,見此帖子http://blog.csdn.net/anshan1984/article/details/8580952
不同的存儲形式在sparse模塊中對應如下:
bsr_matrix(arg1[, shape, dtype, copy, blocksize]) Block Sparse Row matrix
coo_matrix(arg1[, shape, dtype, copy]) A sparse matrix in COOrdinate format.
csc_matrix(arg1[, shape, dtype, copy]) Compressed Sparse Column matrix
csr_matrix(arg1[, shape, dtype, copy]) Compressed Sparse Row matrix
dia_matrix(arg1[, shape, dtype, copy]) Sparse matrix with DIAgonal storage
dok_matrix(arg1[, shape, dtype, copy]) Dictionary Of Keys based sparse matrix.
lil_matrix(arg1[, shape, dtype, copy]) Row-based linked list sparse matrix
3. 要將普通的非稀疏矩陣變為相應存儲形式的稀疏矩陣只要如下:(以coo_matrix為例)
A = coo_matrix([[1,2],[3,4]])
或者按照相應存儲形式的要求,喂給參數,構建矩陣,以coo為例:
>>> row = np.array([0,0,1,3,1,0,0])
>>> col = np.array([0,2,1,3,1,0,0])
>>> data = np.array([1,1,1,1,1,1,1])
>>> coo_matrix((data, (row,col)), shape=(4,4)).todense()
matrix([[3, 0, 1, 0],
[0, 2, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 1]])
4. hstack和vstack函數可以將稀疏矩陣橫向或者縱向合並,比如:
>>> from scipy.sparse import coo_matrix, vstack
>>> A = coo_matrix([[1,2],[3,4]])
>>> B = coo_matrix([[5,6]])
>>> vstack( [A,B] ).todense()
matrix([[1, 2],
[3, 4],
[5, 6]])
但是經過測試,如果A和B的數據形式不一樣,不能合並。比如A存儲的是字符串,B是數字,那么不能合並。也就是說一個矩陣中的數據格式必須是相同的。
5. diags函數可以建立稀疏的對角矩陣
6. 對於大多數(似乎只處了coo之外)稀疏矩陣的存儲格式,都可以進行slice操作,比如對於csc,csr。也可以進行arithmetic operations,矩陣的加減乘除,速度很快。
取矩陣的指定列數,比如取矩陣的第1,3,8列:matrix[:,[0,2,7]]
7.sparce矩陣的讀取。可以像常規矩陣一樣通過下標讀取。也可以通過getrow(i),gecol(i)讀取特定的列或者特定的行,以及nonzero()讀取非零元素的位置。