我使用
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来说太大了吗?我该如何解决?
预先感谢您, 问候:)
答案 0 :(得分:0)
如评论中所讨论的,生成的对象可能对您的内存来说太大。
Numpy能够将阵列存储在磁盘上(希望SSD,如果使用HDD,这可能太慢了)。 这称为memmap。
可以在memmap中存储诸如字符串之类的数据类型,但这会变得很棘手:numpy.memmap for an array of strings?
此外,首先将数据放入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