繁体   English   中英

为什么6GB的csv文件无法以numpy的形式整体读取到内存(64GB)

[英]Why 6GB csv file is not possible to read whole to memory (64GB) in numpy

我有sze为6.8GB的csv文件,尽管我有64GB的RAM,但我无法将其读入numpy数组的内存中

CSV文件有1000万行,每行有131条记录(int和float的混合)

我试图读取它以浮动numpy数组

import numpy as np
data = np.genfromtxt('./data.csv', delimiter=';')

由于内存而失败。

当我只读一行并得到大小时

data = np.genfromtxt('./data.csv', delimiter=';', max_rows=1)
data.nbytes

我得到1048个字节所以,我希望10.000.000 * 1048 = 10,48 GB应该可以毫无问题地存储在内存中。 为什么不起作用?

最后,我试图通过定义类型来优化内存中的数组

data = np.genfromtxt('./data.csv', delimiter=';', max_rows=1,
dtype="i1,i1,f4,f4,....,i2,f4,f4,f4")
data.nbytes

所以我得到每行只有464B,所以这将是只有4.56 GB,但它仍然无法加载到内存中。

你有什么主意吗? 我需要在Keras中使用此数组。 谢谢

genfromtext是常规的python代码,仅在最后一步将数据转换为numpy数组。 在这最后一步,在RAM需要持有一个巨大的蟒蛇清单,以及所产生的numpy的阵列,都在同一时间。 也许您可以尝试使用numpy.fromfile或Pandas csv阅读器。 由于您知道每列的数据类型和行数,因此您还可以自己预先分配一个numpy数组,并使用简单的for循环将其填充。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM