我使用
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来说是不是太大了?我怎么才能修复它?
提前感谢您,问候们:)
发布于 2018-11-05 06:47:19
正如注释中所讨论的,结果对象可能对于您的内存来说太大了。
Numpy有能力在你的磁盘上存储数组(希望是SSD,如果你使用硬盘,这可能会太慢)。这称为memmap。
在内存映射中存储字符串等数据类型是可能的,但这可能会变得很棘手:numpy.memmap for an array of strings?
而且,首先将数据放到memmap中可能会很复杂。您可能希望拆分文件,并在多个to中加载。然后,您可以将各个部分逐个写入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 # 400https://stackoverflow.com/questions/53146153
复制相似问题