2013-12-16 97 views
5

我有一個非常大的SciPy的稀疏矩陣(CSR_MATRIX)。我只想知道我可以如何計算每行的值的總和以及矩陣的每列的值的總和。如何獲得每個列的每一行和總和的總和SciPy的稀疏矩陣(csr_matrix和csc_matrix)?

我必須做同樣的操作的代碼,但它使用CSC_MATRIX。這兩者之間有什麼不同之處有關行和列的總和?

我想也許我可以得到一個快速反應,其他人也可以使用,否則我可以測試它自己。

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 

所以rowsums應該[3, 3, 15]colsum應該是[5, 5, 11]

我知道,我可以使用matrix.getrow(i)和matrix.getcol(我)來獲取每一行和每一列和使用sum()函數來獲得的總和,但我關心的是性能。我需要一個更有效的解決方案。

回答

7

使用sum方法的axis說法:

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

非常感謝您對您的幫助很大。我測試了你的解決方案,它效果很棒。 – alenrooni