(Python Scipy)如何压平csr_matrix并将其附加到另一个csr_matrix?

时间:2013-03-22 05:34:31

标签: python xml nlp scipy classification

我将每个XML文档表示为csr_matrix格式的特征矩阵。现在我有大约3000个XML文档,我得到了一个csr_matrices列表。我想将这些矩阵中的每一个展平为特征向量,然后我想组合所有这些特征向量以形成一个csr_matrix,将所有XML文档表示为一个,其中每行是一个文档,每列都是一个特征。

实现此目的的一种方法是通过此代码

X= csr_matrix([a.toarray().ravel().tolist() for a in ls])

其中ls是csr_matrices的列表,然而,这是非常低效的,因为对于3000个文档,这只是崩溃!

换句话说,我的问题是,如何将该列表'ls'中的每个csr_matrix展平,而不必将其转换为数组,以及如何将展平的csr_matrices追加到另一个csr_matrix中。

请注意我正在使用Scipy的python

提前致谢!

1 个答案:

答案 0 :(得分:4)

为什么你对每个XML使用csr_matrix,也许最好使用lillil_matrix支持重塑方法,这是一个例子:

N, M, K = 100, 200, 300
matrixs = [sparse.rand(N, M, format="csr") for i in xrange(K)]
matrixs2 = [m.tolil().reshape((1, N*M)) for m in matrixs]
m1 = sparse.vstack(matrixs2).tocsr()

# test with dense array
#m2 = np.vstack([m.toarray().reshape(-1) for m in matrixs])
#np.allclose(m1.toarray(), m2)