我有一个250 MB的CSV文件,我需要阅读~7000行和~9000列.每行代表一个图像,每列是一个像素(灰度值0-255)
我从一个简单的开始,np.loadtxt("data/training_nohead.csv",delimiter=",")
但这给了我一个内存错误.我认为这很奇怪,因为我正在运行64位Python,安装了8个内存,并且在仅使用大约512 MB后就死了.
我从那以后尝试了其他几种策略,包括:
import fileinput
并一次读取一行,将它们附加到数组中
np.fromstring
读完整个文件后
np.genfromtext
手动解析文件(因为所有数据都是整数,这很容易编码)
每种方法都给了我相同的结果.MemoryError大约512 MB.想知道是否有一些特殊的512MB,我创建了一个简单的测试程序,它填满了内存,直到python崩溃:
str = " " * 511000000 # Start at 511 MB while 1: str = str + " " * 1000 # Add 1 KB at a time
这样做直到大约1演出才崩溃.我也是,只是为了好玩,试过:( str = " " * 2048000000
填2场演出) - 这顺便跑了.填写RAM,从不抱怨.所以问题不在于我可以分配的RAM总量,而是似乎是我可以分配内存的TIMES数量......
在我发现这篇文章之前,我无聊地google'd:Python大文件上的内存不足(numpy)
我完全复制了答案中的代码:
def iter_loadtxt(filename, delimiter=',', skiprows=0, dtype=float): def iter_func(): with open(filename, 'r') as infile: for _ in range(skiprows): next(infile) for line in infile: line = line.rstrip().split(delimiter) for item in line: yield dtype(item) iter_loadtxt.rowlength = len(line) data = np.fromiter(iter_func(), dtype=dtype) data = data.reshape((-1, iter_loadtxt.rowlength)) return data
iter_loadtxt("data/training_nohead.csv")
这次调用给出了稍微不同的错误:
MemoryError: cannot allocate array memory
谷歌搜索这个错误我只找到一个,不是那么有用,发布:内存错误(MemoryError)创建一个布尔NumPy数组(Python)
当我运行Python 2.7时,这不是我的问题.任何帮助,将不胜感激.