2013-12-16 7 views
5

Ich habe eine sehr große Scipy Sparse-Matrix (CSR_MATRIX). Ich möchte nur wissen, wie ich die Summe der Werte für jede Zeile und auch die Summe der Werte für jede Spalte der Matrix berechnen kann.Wie erhält man die Summe jeder Zeile und Summe jeder Spalte in Scipy-Sparse-Matrizen (csr_matrix und csc_matrix)?

Ich habe einen Code, der die gleiche Operation ausführt, aber es verwendet CSC_MATRIX. Gibt es etwas Unterschiedliches zwischen diesen beiden bezüglich der Summierung der Zeilen und Spalten?

Ich dachte, vielleicht kann ich eine schnelle Antwort bekommen, die andere auch verwenden können, sonst kann ich es selbst testen.

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 

so sollte rowsums[3, 3, 15] sein und colsum[5, 5, 11] sein sollte.

Ich weiß, dass ich matrix.getrow (i) und matrix.getcol (i) verwenden kann, um jede Zeile und Spalte zu erhalten und sum() -Funktion zu verwenden, um die Summe zu erhalten, aber mein Anliegen ist die Leistung. Ich brauche eine effizientere Lösung.

Antwort

7

Verwenden Sie das axis Argument der sum Methode:

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

Sie sehr viel für Ihre große Hilfe danken. Ich habe deine Lösung getestet und es hat fantastisch funktioniert. – alenrooni

Verwandte Themen