gpt4 book ai didi

python - 为什么 scipy.sparse.csc_matrix.sum() 的结果将其类型更改为 numpy 矩阵?

转载 作者:行者123 更新时间:2023-12-02 05:10:36 25 4
gpt4 key购买 nike

我想生成一个大的稀疏矩阵并将其求和,但我经常遇到 MemoryError 。于是我尝试通过 scipy.sparse.csc_matrix.sum 进行操作相反,但发现求和后数据类型又变回了 numpy matrix

window = 10    
np.random.seed = 0
mat = sparse.csc_matrix(np.random.rand(100, 120)>0.5, dtype='d')
print type(mat)
>>> <class 'scipy.sparse.csc.csc_matrix'>

mat_head = mat[:,0:window].sum(axis=1)
print type(mat_head)
>>> <class 'numpy.matrixlib.defmatrix.matrix'>

因此,我生成了 mat 作为零矩阵,只是为了测试 mat_head 全为零时的结果。

mat = sparse.csc_matrix((100,120))
print type(mat)
>>> <class 'scipy.sparse.csc.csc_matrix'>
mat_head = mat.sum(axis=1)
print type(mat_head)
>>> <class 'numpy.matrixlib.defmatrix.matrix'>
print np.count_nonzero(mat_head)
>>> 0

为什么会发生这种情况?因此,通过 scipy.sparse 求和在保留内存方面不会比 numpy 受益,因为它们无论如何都会更改数据类型?

最佳答案

只要有可能为本质上的设计选择给出一个强有力的理由,我会提出以下论点:

csr 和 csc 格式是为稀疏但不是极其稀疏的矩阵而设计的。特别是,对于具有明显少于 n 个非零值的 nxn 矩阵,这些格式相当浪费,因为在数据和索引之上,它们携带一个大小为 n+1 的字段 indptr(描述行或列)。

因此,假设正确使用了 csc 或 csr 矩阵,则可以合理地预期行或列总和不会稀疏,并且相应的方法应返回密集向量。

关于python - 为什么 scipy.sparse.csc_matrix.sum() 的结果将其类型更改为 numpy 矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50713828/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com