title: Sum over rows in scipy.sparse.csr_matrix
body: <p>I have a big csr_matrix and I want to add over rows and obtain a new csr_matrix with the same number of columns but reduced number of rows. (Context: The matrix is a document-term matrix obtained from sklearn CountVectorizer and I want to be able to quickly combine documents according to codes associated with these documents)</p>
  
  <p>For a minimal example, this is my matrix:</p>
  
  <pre><code>import numpy as np
  from scipy.sparse import csr_matrix
  from scipy.sparse import vstack
  
  row = np.array([0, 4, 1, 3, 2])
  col = np.array([0, 2, 2, 0, 1])
  dat = np.array([1, 2, 3, 4, 5])
  A = csr_matrix((dat, (row, col)), shape=(5, 5))
  print A.toarray()
  
  [[1 0 0 0 0]
   [0 0 3 0 0]
   [0 5 0 0 0]
   [4 0 0 0 0]
   [0 0 2 0 0]]
  </code></pre>
  
  <p>No let's say I want a new matrix <code>B</code> in which rows (1, 4) and (2, 3, 5) are combined by summing them, which would look something like this:</p>
  
  <pre><code>[[5 0 0 0 0]
   [0 5 5 0 0]]
  </code></pre>
  
  <p>And should be again in sparse format (because the real data I'm working with is large). I tried to sum over slices of the matrix and then stack it:</p>
  
  <pre><code>idx1 = [1, 4]
  idx2 = [2, 3, 5]
  A_sub1 = A[idx1, :].sum(axis=1)
  A_sub2 = A[idx2, :].sum(axis=1)
  B = vstack((A_sub1, A_sub2))
  </code></pre>
  
  <p>But this gives me the summed up values just for the non-zero columns in the slice, so I can't combine it with the other slices because the number of columns in the summed slices are different.</p>
  
  <p>I feel like there must be an easy way to do this. But I couldn't find any discussion of this online or in the documentation. What am I missing?</p>
  
  <p>Thank you for your help</p>