gpt4 book ai didi

python - 使用 numpy 读取 csv 文件的主要内存问题

转载 作者:太空狗 更新时间:2023-10-29 20:21:55 28 4
gpt4 key购买 nike

我从 Kaggle 获取了 KDD track1 数据集,并决定在我的 16GB 高内存 EC2 实例上将一个 ~2.5GB 的 3 列 CSV 文件加载到内存中:

data = np.loadtxt('rec_log_train.txt')

python session 耗尽了我所有的内存 (100%),然后被杀死了。

然后我使用 R(通过 read.table)读取同一个文件,它使用了不到 5GB 的 ram,在我调用垃圾收集器后崩溃到不到 2GB。

我的问题是为什么这在 numpy 下会失败,以及将文件读入内存的正确方法是什么。是的,我可以使用生成器来避免这个问题,但这不是目标。

最佳答案

import pandas, re, numpy as np

def load_file(filename, num_cols, delimiter='\t'):
data = None
try:
data = np.load(filename + '.npy')
except:
splitter = re.compile(delimiter)

def items(infile):
for line in infile:
for item in splitter.split(line):
yield item

with open(filename, 'r') as infile:
data = np.fromiter(items(infile), float64, -1)
data = data.reshape((-1, num_cols))
np.save(filename, data)

return pandas.DataFrame(data)

这会读入 2.5GB 的文件,并序列化输出矩阵。输入文件是“延迟”读取的,因此没有构建中间数据结构并且使用最少的内存。初始加载需要很长时间,但每次后续加载(序列化文件)都很快。如果您有提示,请告诉我!

关于python - 使用 numpy 读取 csv 文件的主要内存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10264739/

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