[討論] 快速讀ascii的大資料檔

看板MATLAB作者 (sppmg)時間10年前 (2014/05/27 22:55), 10年前編輯推噓2(201)
留言3則, 3人參與, 最新討論串1/1
這裡要讀的檔案屬於中等體積。 也就是很大,但記憶體還夠整個載入那種。 我有些資料檔為純文字,格式如下 0 0.00062 -0.00719 0.00025 -0.00938 0.01125 0.0005 -0.03875 0.03156 由於這個txt檔大小有260MB,包含 10015744 * 3 的矩陣。 所以我用load會非常慢。 推測是因為矩陣大小為動態增加。matlab 會不斷消耗時間於要求記憶體上。 下面是我用桌電經由區網取得筆電上的數據。 (簡單說就是讀檔速度較慢,運算較快) 在筆電上load mat 檔一樣是3s,但load txt 則是61s % load mat >> tic;data1=load('filename.mat');toc Elapsed time is 3.642629 seconds. % load text >> tic;data2=load('filename.txt');toc Elapsed time is 23.262854 seconds. % load text by other method. >> tic;tmp_s=fread(fid,inf,'uint8=>char');toc; ... data_col_num=numel(sscanf(strtok(tmp_s,char(10)),'%f'));toc; ... data3=sscanf(tmp_s,'%f',[data_col_num,inf])';toc; ... clearvars tmp_s;toc Elapsed time is 1.350866 seconds. Elapsed time is 1.372573 seconds. Elapsed time is 6.864294 seconds. Elapsed time is 6.946270 seconds. -------------------------------------- 我最終的方法約為4倍速度 各位有沒有更好的方法呢? 另外有點疑惑。 最後的sscanf中,如果用'%f %f %f' 時間會增加約1倍。 為何??? 附上stackoverflow上其他人的嘗試 http://stackoverflow.com/questions/9440592/fastest-matlab-file-reading or http://goo.gl/vmOetY -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.134.200.117 ※ 文章網址: http://www.ptt.cc/bbs/MATLAB/M.1401202518.A.43A.html ※ 編輯: sppmg (220.134.200.117), 05/27/2014 22:56:03 ※ 編輯: sppmg (220.134.200.117), 05/27/2014 22:59:37

05/27 22:58, , 1F
這麼單純又這麼大的矩陣就不要存成純文字格式吧
05/27 22:58, 1F

05/27 23:00, , 2F
因為我的來源就是txt啊!而且之後要用gnuplot
05/27 23:00, 2F

07/14 17:14, , 3F
試試textscan 我自己模擬一筆資料 load 51秒 textscan 11秒
07/14 17:14, 3F
文章代碼(AID): #1JXATMGw (MATLAB)