大型CSV文件(numpy)上的Python内存不足

我有一个3GB的CSV文件,我尝试使用python读取,我需要中位数列。


from numpy import * 

def data():

    return genfromtxt('All.csv',delimiter=',')


data = data() # This is where it fails already.


med = zeros(len(data[0]))

data = data.T

for i in xrange(len(data)):

    m = median(data[i])

    med[i] = 1.0/float(m)

print med

我得到的错误是这样的:


Python(1545) malloc: *** mmap(size=16777216) failed (error code=12)


*** error: can't allocate region


*** set a breakpoint in malloc_error_break to debug


Traceback (most recent call last):


  File "Normalize.py", line 40, in <module>


  data = data()


  File "Normalize.py", line 39, in data


  return genfromtxt('All.csv',delimiter=',')


File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-

packages/numpy/lib/npyio.py", line 1495, in genfromtxt


for (i, line) in enumerate(itertools.chain([first_line, ], fhd)):


MemoryError

我认为这只是内存不足错误。我正在运行具有4GB ram的64位MacOSX,并且以64位模式编译了numpy和Python。


我该如何解决?我应该尝试仅用于内存管理的分布式方法吗?


谢谢


编辑:也尝试与此,但没有运气...


genfromtxt('All.csv',delimiter=',', dtype=float16)


海绵宝宝撒
浏览 1712回答 3
3回答

DIEA

使用genfromtxt()的问题在于,它试图将整个文件加载到内存中,即加载到numpy数组中。这对于小文件非常有用,但对于像您这样的3GB输入来说,它却很糟糕。由于您只是在计算列中位数,因此无需读取整个文件。一种简单但不是最有效的方法是多次逐行读取整个文件,然后遍历各列。

凤凰求蛊

为什么不使用python csv模块?>> import csv>> reader = csv.reader(open('All.csv'))>>> for row in reader:...&nbsp; &nbsp; &nbsp;print row
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python