【发布时间】:2015-06-20 05:01:35
【问题描述】:
我有一个很大的 csr_matrix,我想添加多个行并获得一个具有相同列数但行数减少的新 csr_matrix。 (上下文:矩阵是从sklearn CountVectorizer得到的document-term矩阵,我希望能够根据这些文档关联的代码快速组合文档)
举个简单的例子,这是我的矩阵:
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))
但这给了我切片中非零列的总和值,所以我不能将它与其他切片合并,因为求和切片中的列数不同。
我觉得必须有一个简单的方法来做到这一点。但我在网上或文档中找不到任何关于此的讨论。我错过了什么?
感谢您的帮助
【问题讨论】:
标签: python numpy scipy scikit-learn sparse-matrix