首页 > 解决方案 > (Python) numpy genfromtxt 转换问题

问题描述

我用

netdata = num.genfromtxt('resultscut.rw', dtype=None, delimiter = '|', usecols=(0,1,2,3,4))

从文本数据文件中生成列表。这真的很好但是当我把一个更大的数据文件转换我得到这个错误:

  File "/home/.local/lib/python2.7/site-packages/numpy/lib/npyio.py", line 2047, in genfromtxt
    for (i, conv) in enumerate(converters)]))
MemoryError

genfromtxt 是不是太大了?我该如何解决?

提前谢谢你,问候:)

标签: pythonnumpygenfromtxt

解决方案


正如评论中所讨论的,生成的对象可能对您的记忆来说太大了。

Numpy 能够在您的磁盘上存储阵列(希望 SSD,如果您使用 HDD,这可能会太慢)。这称为memmap

可以在 memmap 中存储诸如字符串之类的数据类型,但这可能会变得很棘手:numpy.memmap 用于字符串数组?

此外,首先将数据放入 memmap 可能会很复杂。您可能想要拆分文件并多次加载它。然后您可以将各个部分一一写入memmap。

另一个重要的点可能是dtype. 您指定None并使用许多列。您在不同的列中有不同的数据类型吗?如果是,您可能想切换到pandas,而不是 numpy。这将为您提供此电子表格(如数据)的正确数据类型。确保为每一列使用适当的数据类型。这可以显着减少您的内存占用(并且可能已经解决了您的问题):https ://www.dataquest.io/blog/pandas-big-data/

要检查 numpy 数组的内存占用,您可以使用nbytes

np.ones((10,10), dtype="float64").nbytes # 800
np.ones((10,10), dtype="int32").nbytes # 400

推荐阅读