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

作者: sppmg (sppmg)   2014-05-27 22:55:14
這裡要讀的檔案屬於中等體積。
也就是很大,但記憶體還夠整個載入那種。
我有些資料檔為純文字,格式如下
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.
作者: sunev (Veritas)   2014-05-27 22:58:00
這麼單純又這麼大的矩陣就不要存成純文字格式吧
作者: sppmg (sppmg)   2014-05-27 23:00:00
因為我的來源就是txt啊!而且之後要用gnuplot

Links booklink

Contact Us: admin [ a t ] ucptt.com