2012-04-28 8 views
11

Tengo una matriz grande que me gustaría convertir a formato CSR disperso.Valor de acceso, índice de columna y datos row_ptr de la matriz escasa CSR scipy

Cuando hago:

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

print Ks 

Donde A es denso, me sale

(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 

etc ...

que pueda obtener vectores de índice de la fila, el índice de la columna, y el valor utilizando:

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]] 

Pero ¿es posible extraer los vectores supuestamente contenidos en el formato CSR disperso (valor, índice de columna, puntero de fila)?

La documentación de SciPy explica que se podría generar una matriz de CSR a partir de esos tres vectores, pero me gustaría hacer lo contrario, sacar esos tres vectores.

¿Qué me estoy perdiendo?

¡Gracias por el tiempo!

Respuesta

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

Creo que estos atributos son indocumentados que pueden quedar sujetos a cambios, pero los he usado en varias versiones de scipy.

Cuestiones relacionadas