2012-05-21 125 views
4

給定一個任意numpy數組(ndarray),有沒有函數或簡短的方法將它轉換爲scipy.sparse矩陣?numpy數組到scipy.sparse矩陣

我想要的東西,就像:

A = numpy.array([0,1,0],[0,0,0],[1,0,0]) 
S = to_sparse(A, type="csr_matrix") 

回答

3

我平時做這樣的事情

>>> import numpy, scipy.sparse 
>>> A = numpy.array([[0,1,0],[0,0,0],[1,0,0]]) 
>>> Asp = scipy.sparse.csr_matrix(A) 
>>> Asp 
<3x3 sparse matrix of type '<type 'numpy.int64'>' 
    with 2 stored elements in Compressed Sparse Row format> 
+0

嗯,這很容易,我應該嘗試過。我沒想到構造函數會進行轉換。這也適用於其他稀疏矩陣類型的構造函數。 – clstaudt

1

一個非常有用和相關的例子是在幫助!

import scipy.sparse as sp 
help(sp) 

這給:

Example 2 
--------- 

Construct a matrix in COO format: 

>>> from scipy import sparse 
>>> from numpy import array 
>>> I = array([0,3,1,0]) 
>>> J = array([0,3,1,2]) 
>>> V = array([4,5,7,9]) 
>>> A = sparse.coo_matrix((V,(I,J)),shape=(4,4)) 

另外值得一提的各種構造函數(再次從幫助):

1. csc_matrix: Compressed Sparse Column format 
    2. csr_matrix: Compressed Sparse Row format 
    3. bsr_matrix: Block Sparse Row format 
    4. lil_matrix: List of Lists format 
    5. dok_matrix: Dictionary of Keys format 
    6. coo_matrix: COOrdinate format (aka IJV, triplet format) 
    7. dia_matrix: DIAgonal format 

To construct a matrix efficiently, use either lil_matrix (recommended) or 
dok_matrix. The lil_matrix class supports basic slicing and fancy 
indexing with a similar syntax to NumPy arrays. 

你的例子就是這麼簡單:

S = sp.csr_matrix(A) 
+1

@clstaudt我不確定你在找什麼,'sp.csr_matrix(A)'會從密集的numpy數組'A'構造一個'csr'類型的矩陣,而'sp.csc_matrix(A)'會構造一個'csc'矩陣類型等......構造函數_are_是您正在尋找的高效轉換函數(儘管請閱讀幫助中的注意事項)。 – Hooked

+0

你是對的,構造者做我正在尋找的轉換。我期望他們只接受與條目存儲方式相對應的參數,如:A = sparse.coo_matrix((V,(I,J)),shape =(4,4)) – clstaudt

0

是否有可能建立coo和csr矩陣與numpy沒有使用scipy?

+0

這些矩陣是由'scipy.sparse'類。 – hpaulj