gpt4 book ai didi

python - pandas 对 SparseSeries 列表的内存使用情况

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

我正在尝试从稀疏 numpy 矩阵创建 SparseSeries 列表。创建 lil_matrix 速度很快,并且不会消耗大量内存(实际上,我的维度更多是数百万个量级,即 1500 万个样本和 400 万个特征)。我读过以前的topic关于这一点。但该解决方案似乎也耗尽了我所有的内存,卡住了我的计算机。从表面上看,pandas SparseSeries 看起来并不真正稀疏,还是我做错了什么?最终目标是从中创建一个 SparseDataFrame(就像我提到的其他主题一样)。

from scipy.sparse import lil_matrix, csr_matrix
from numpy import random
import pandas as pd

nsamples = 10**5
nfeatures = 10**4
rm = lil_matrix((nsamples,nfeatures))
for i in xrange(nsamples):
index = random.randint(0,nfeatures,size=4)
rm[i,index] = 1

l=[]
for i in xrange(nsamples):
l.append(pd.Series(rm[i,:].toarray().ravel()).to_sparse(fill_value=0))

最佳答案

由于您的目标是稀疏数据帧,因此我跳过了Series阶段并直接进入数据帧。我只有耐心在较小的数组大小上执行此操作:

nsamples = 10**3 
nfeatures = 10**2

创建rm是相同的,但我不加载到列表中,而是这样做:

df = pd.DataFrame(rm[1,:].toarray().ravel()).to_sparse(0)
for i in xrange(1,nsamples):
df[i] = rm[i,:].toarray().ravel()

不幸的是,这比你的运行速度慢得多,但结果是一个数据帧,而不是一个列表。我对此进行了一些尝试,据我所知,没有任何快速方法可以逐列构建大型稀疏数据帧(甚至全是零),而不是一次全部构建(这不会是内存)高效的)。我能找到的文档中的所有示例都从密集结构开始,然后一步转换为稀疏结构。

无论如何,通过一次压缩一列,这种方式应该具有相当的内存效率,这样您就永远不会同时未压缩完整的数组/数据帧。生成的数据帧肯定是稀疏的:

In [39]: type(df)
Out[39]: pandas.sparse.frame.SparseDataFrame

并且绝对节省空间(几乎 25 倍压缩):

In [40]: df.memory_usage().sum()
Out[40]: 31528

In [41]: df.to_dense().memory_usage().sum()
Out[41]: 800000

关于python - pandas 对 SparseSeries 列表的内存使用情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30354869/

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