2013-12-16 10 views
5

मेरे पास एक बहुत बड़ा Scipy स्पैस मैट्रिक्स (CSR_MATRIX) है। मैं सिर्फ यह जानना चाहता हूं कि मैं प्रत्येक पंक्ति के लिए मानों की योग की गणना कैसे कर सकता हूं और मैट्रिक्स के प्रत्येक कॉलम के लिए मानों का योग भी कर सकता हूं।Scipy sparse matrices (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 (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

संबंधित मुद्दे