为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

海绵宝宝撒 2019-09-21 14:07:04
我有一个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.Tfor 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 debugTraceback (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 genfromtxtfor (i, line) in enumerate(itertools.chain([first_line, ], fhd)):MemoryError我认为这只是内存不足错误。我正在运行具有4GB ram的64位MacOSX,并且以64位模式编译了numpy和Python。我该如何解决?我应该尝试仅用于内存管理的分布式方法吗?谢谢编辑:也尝试与此,但没有运气...genfromtxt('All.csv',delimiter=',', dtype=float16)
查看完整描述

3 回答

?
DIEA

TA贡献1820条经验 获得超2个赞

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


查看完整回答
反对 回复 2019-09-21
?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

为什么不使用python csv模块?


>> import csv

>> reader = csv.reader(open('All.csv'))

>>> for row in reader:

...     print row


查看完整回答
反对 回复 2019-09-21
  • 3 回答
  • 0 关注
  • 1711 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信