2014-11-03 52 views
0

我必須使用相當於sicpy的sparse.coo_matrix和sparse.csr_matrix在矩陣上操作。但是,我不能使用scipy(它與我想使用它的圖像分析軟件不兼容)。但是,我可以使用numpy。 有沒有簡單的方法來完成什麼scipy.sparse.coo_matrix和scipy.sparse.csr_matrix做,只有numpy? 謝謝!是否有可能使用scipy建立coo和csr矩陣而不使用scipy?

回答

3

一個sparse.coo_matrix的屬性是:

dtype : dtype 
    Data type of the matrix 
shape : 2-tuple 
    Shape of the matrix 
ndim : int 
    Number of dimensions (this is always 2) 
nnz 
    Number of nonzero elements 
data 
    COO format data array of the matrix 
row 
    COO format row index array of the matrix 
col 
    COO format column index array of the matrix 

datarowcol數組實質上是datai,當與coo_matrix((data, (i, j)), [shape=(M, N)])j定義參數。 shape也來自定義。 dtypedata陣列。 nzz,因爲第一個近似值是data(不包含零和重複座標)的長度。

因此很容易構建一個coo類似的對象。同樣,一個lil矩陣有2個列表。並且dok矩陣是字典(參見其.__class__.__mro__)。

一個csr矩陣的數據結構是一個比較晦澀:

data 
    CSR format data array of the matrix 
indices 
    CSR format index array of the matrix 
indptr 
    CSR format index pointer array of the matrix 

它仍然有3個陣列。它們可以來自coo陣列。但是,使用純Python代碼這樣做不會像編譯的scipy函數那麼快。

但是,這些類有很多功能,需要大量的工作才能複製。有些是純Python,但關鍵部分是爲了速度而編譯的。特別重要的是csr_matrix實現的數學運算,如矩陣乘法。

複製臨時存儲的數據結構是一回事;複製功能是另一回事。