亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

大型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條經驗 獲得超3個贊

使用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 關注
  • 1763 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號