我的數據是88200(行)* 29403(列)(大約14Gb)。數據已經在matlab中使用dlmwrite創建。我試圖用下面的方法來讀取python中的文件。在所有嘗試我已經耗盡內存:嘗試將csv文件讀入python時出現內存不足
我的操作系統:Ubuntu 16.04,32GB內存,交換的20Gb Python的2.7.12,熊貓:0.19,GCC 5.4.0
1>使用CSV:
import csv
import numpy
filename = 'data.txt'
raw_data = open(filename, 'rb')
reader = csv.reader(raw_data, delimiter=',', quoting=csv.QUOTE_NONE)
x = list(reader)
data = numpy.array(x).astype('float')
2A>使用numpy的loadtxt:
import numpy
filename = 'data.txt'
raw_data = open(filename, 'rb')
data = numpy.loadtxt(raw_data, delimiter=",")
2B>使用numpy的genfromtxt:
import numpy
x=np.genfromtxt('vectorized_image_dataset.txt',skip_header=0,skip_footer=0,delimiter=',',dtype='float32')
3>使用pandas.read_csv:
from pandas import *
import numpy as np
tp = read_csv(filepath_or_buffer='data.txt', header=None, iterator=True, chunksize=1000)
df = concat(tp, ignore_index=True)
在所有它跑出存儲器上述方法。
數據文件已經使用dlmwrite(matlab)創建。一個圖像列表(list.txt)逐一讀取,轉換爲浮點,矢量化並使用dlmwrite存儲。代碼如下:
fileID = fopen('list.txt');
N=88200;
C = textscan(fileID,'%s');
fclose(fileID);
for i=1:N
A=imread(C{1}{i});
% convert the file to vector
B=A(:);
% convert the above vector to a row
D=B';
% divide by 256
%E=double(D)/double(256);
E=single(D)/single(256);
dlmwrite('vectorized_image_dataset.txt',E,'-append');
clear A;clear B;clear D;clear E;
end
你試過逐行讀取文件中的行?用open打開它(「data.txt」,「r」)作爲f:「'然後每次使用for循環處理每行:'for line in f:' – GeckStar
我需要整個數據一個numpy數組,如果我一行一行地讀,我將不得不將對應於新行的數據追加到numpy數組中,這將涉及在每次迭代中調整數組的大小在matlab數組調整大小非常緩慢,我想它會 – user27665
而不是每行添加一行數組嘗試在一個循環(半或四分之一)讀取數據的塊,然後連接數組 –