【发布时间】:2020-05-24 17:15:45
【问题描述】:
我有一个大的稀疏矩阵 X(2 百万行,23k 列),我想在其上添加一个 rowsum 列并返回一个稀疏矩阵。
下面我试过了
np.hstack( (X.toarray(),X.sum(axis=1)) )
但它不适用于大型稀疏矩阵。
问题是,当我调用 X.toarray() 时,它会炸毁并终止 python 内核,而不会给出任何错误消息。
类似的我试过
sparse.hstack( X ,sparse.csr_matrix(X.sum(axis=1)))
sparse.csr_matrix(X.sum(axis=1)).ndim # is 2
X.ndim # 2 as well
但它给了我以下错误消息:
~/miniconda3/lib/python3.7/site-packages/scipy/sparse/construct.py in bmat(blocks, format, dtype)
546
547 if blocks.ndim != 2:
--> 548 raise ValueError('blocks must be 2-D')
549
550 M,N = blocks.shape
ValueError: blocks must be 2-D
有没有办法解决这个问题?
【问题讨论】:
-
链接的答案没有说明使用
np.hstack!toarray经常失败,因为结果数组对于您的内存来说太大了。还有sparse.vstack。 -
@hpaulj 不知何故我得到了错误的链接,我删除了它。
-
查看
sparse.stack的文档。第一个 arg 应该是列表或元组。我在您的旧链接中的回答仍然正确。
标签: python numpy scikit-learn scipy