Python SciPy Sparse模塊學習筆記


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()讀取非零元素的位置。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM