2013-12-16 3 views
5

私は非常に大規模なscipyのダウンロード疎行列(CSR_MATRIX)を持っています。私はちょうど私が、各行の値の合計とも行列の各列の値の合計を計算する方法を知りたいです。

私は、同じ操作を行うコードを持っているが、それはCSC_MATRIXを使用しています。行と列を合計することに関して、これらの2つの間に異なるものはありますか?

私は多分、私は他の人も使用することができますまたは他の私はそれを自分自身をテストすることができ、迅速な応答を得ることができます思いました。

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(i)を使用して各行と列を取得し、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