Сумма по строкам в scipy.sparse.csr_matrix

У меня есть большая csr_matrix, и я хочу добавить поверх строк и получить новую csr_matrix с тем же количеством столбцов, но с уменьшенным количеством строк. (Контекст: матрица представляет собой матрицу термина документа, полученную из sklearn CountVectorizer, и я хочу иметь возможность быстро комбинировать документы в соответствии с кодами, связанными с этими документами)

Для минимального примера, это моя матрица:

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]]

Нет, скажем, я хочу новую матрицуB в котором строки (1, 4) и (2, 3, 5) объединяются путем их суммирования, что будет выглядеть примерно так:

[[5 0 0 0 0]
 [0 5 5 0 0]]

И должен быть снова в разреженном формате (потому что реальные данные, с которыми я работаю, большие). Я попытался сложить по кусочкам матрицы и затем сложить ее:

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))

Но это дает мне суммированные значения только для ненулевых столбцов в срезе, поэтому я не могу объединить его с другими срезами, потому что количество столбцов в суммированных срезах различно.

Я чувствую, что должен быть легкий способ сделать это. Но я не смог найти ни одного обсуждения этого онлайн или в документации. Чего мне не хватает?

Спасибо за помощь

Ответы на вопрос(1)

Ваш ответ на вопрос