2013-12-16 13 views
5

Ho una matrice sparsa Scipy molto grande (CSR_MATRIX). Voglio solo sapere come posso calcolare la somma dei valori per ogni riga e anche la somma dei valori per ogni colonna della matrice.Come ottenere la somma di ogni riga e somma di ogni colonna nelle matrici sparse di Scipy (csr_matrix e csc_matrix)?

Ho un codice che esegue la stessa operazione ma utilizza CSC_MATRIX. C'è qualcosa di diverso tra questi due riguardo alla somma delle righe e delle colonne?

Ho pensato che forse potrei ottenere una risposta rapida che gli altri possono utilizzare oppure posso testare da solo.

from scipy.sparse import * 
from scipy import * 
row = array([0,0,1,2,2,2]) 
col = array([0,2,2,0,1,2]) 
data = array([1,2,3,4,5,6]) 
csr_matrix((data,(row,col)), shape=(3,3)).todense() 
rowsums = [] 
colsums = [] 
#compute rowsums and colsums 

così rowsums dovrebbe essere [3, 3, 15] e colsum dovrebbe essere [5, 5, 11].

So che posso usare matrix.getrow (i) e matrix.getcol (i) per ottenere ogni riga e colonna e utilizzare la funzione sum() per ottenere la somma, ma la mia preoccupazione è la prestazione. Ho bisogno di una soluzione più efficiente.

risposta

7

Utilizzare la axis argomento del metodo sum:

In [2]: row = array([0,0,1,2,2,2]) 

In [3]: col = array([0,2,2,0,1,2]) 

In [4]: data = array([1,2,3,4,5,6]) 

In [5]: a = csr_matrix((data, (row, col)), shape=(3,3)) 

In [6]: a.A 
Out[6]: 
array([[1, 0, 2], 
     [0, 0, 3], 
     [4, 5, 6]]) 

In [7]: a.sum(axis=0) # sum the columns 
Out[7]: matrix([[ 5, 5, 11]]) 

In [8]: a.sum(axis=1) # sum the rows 
Out[8]: 
matrix([[ 3], 
     [ 3], 
     [15]]) 
+0

La ringrazio molto per il vostro grande aiuto. Ho provato la tua soluzione e ha funzionato fantastico. – alenrooni

Problemi correlati