gpt4 book ai didi

python - 如何在内存中有效存储可变数量的 scipy稀疏.csr_matrix?

转载 作者:太空宇宙 更新时间:2023-11-03 15:10:03 26 4
gpt4 key购买 nike

我有大约 10,000 个稀疏矩阵,每个矩阵大小为 50,000x5,平均密度为 0.0004。对于每个循环(10000 次),我计算 numpy 数组并将其转换为 csr_matrix 并将其附加到列表中。但内存消耗与附加 numpy 数组一样高,但不如附加 csr_matrices。

如何减少内存消耗,同时将这10K稀疏矩阵保留在内存中以供进一步计算?

示例代码:

from scipy.sparse import csr_matrix
import numpy as np
sparse_matrices = []

for i in range(10000):
np_array = get_np_array()
sparse_matrix = csr_matrix(np_array)
sparse_matrices.append(sparse_matrix)
print np_array.nbytes, sparse_matrix.data.nbytes, repr(sparse_matrix)

会输出类似的内容,这清楚地表明我正在附加压缩矩阵。但是,内存的增长与附加 numpy 矩阵相同。

1987520 520 <49688x5 sparse matrix of type '<type 'numpy.float64'>'
with 65 stored elements in Compressed Sparse Row format>
1987520 512 <49688x5 sparse matrix of type '<type 'numpy.float64'>'
with 64 stored elements in Compressed Sparse Row format>
<小时/>

刚刚意识到,如果我使用 coo_matrix 而不是 csr_matrix,内存消耗是合理的。如果是 csr_matrix 内存约为 8GB。

最佳答案

对于矩阵:

<49688x5 sparse matrix of type '<type 'numpy.float64'>'
with 65 stored elements in Compressed Sparse Row format>

coo格式中,关键属性是rowcoldata,全部有65个元素。 data 是浮点型,其他是整数(行索引和列索引)。

csr 格式中,row 属性被替换为 indptr,每行有一个值(加 1?)。对于这个形状,indptr 的长度为 49688 个元素。如果是 csc 格式,indptr 将只有 5 个元素。

csr 通常比 coo 更紧凑。但在你的情况下有很多空白行;所以它要大得多。如果 csr 是单行矩阵,则它会特别紧凑;如果它是列向量,则根本不紧凑。

关于python - 如何在内存中有效存储可变数量的 scipy稀疏.csr_matrix?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44291891/

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