2012-04-28 12 views
11

Ho una matrice grande che vorrei convertire in un formato CSR sparse.Dati di accesso, indice colonna e dati row_ptr dalla matrice sparse CSR scipy

Quando faccio:

import scipy as sp 
Ks = sp.sparse.csr_matrix(A) 

print Ks 

Dove A è denso, ottengo

(0, 0) -2116689024.0 
(0, 1) 394620032.0 
(0, 2) -588142656.0 
(0, 12) 1567432448.0 
(0, 14) -36273164.0 
(0, 24) 233332608.0 
(0, 25) 23677192.0 
(0, 26) -315783392.0 
(0, 45) 157961968.0 
(0, 46) 173632816.0 

ecc ...

posso ottenere vettori di indice di riga, indice di colonna, e il valore utilizzando:

Knz = Ks.nonzero() 
sparserows = Knz[0] 
sparsecols = Knz[1] 

#The Non-Zero Value of K at each (Row,Col) 
vals = np.empty(sparserows.shape).astype(np.float) 
for i in range(len(sparserows)): 

    vals[i] = K[sparserows[i],sparsecols[i]] 

Ma è possibile estrarre i vettori presumibilmente contenuti nel formato CSR sparse (Valore, Indice colonna, Puntatore riga)?

La documentazione di SciPy spiega che una matrice CSR potrebbe essere generata da quei tre vettori, ma vorrei fare il contrario, ottenere quei tre vettori.

Cosa mi manca?

Grazie per il tempo!

risposta

14
value = Ks.data 
column_index = Ks.indices 
row_pointers = Ks.indptr 

Credo che questi attributi sono privi di documenti che possono renderli soggetti a modifiche, ma io li ho usato su diverse versioni di SciPy.