[英]Importing large amount of data into MATLAB?
我有一個〜80MB的文本文件。 它有2個列和大約6e6行。 我想將數據導入到MATLAB中,但是與load函數無關。 我一直在玩fopen函數,但無法正常工作。
理想情況下,我想獲取第一個數據列並導入,並最終將其放入MATLAB中的一個大數組中。 如果不可能,我想將其拆分為長度為34,013的數組。 我也想對第二數據列做同樣的事情。
fileID = fopen('yourfilename.txt');
formatSpec = '%f %f';
while ~feof(fileID)
C = textscan(fileID,formatSpec,34013);
end
希望這可以幫助..
編輯:
您得到錯誤的原因是因為C有兩列。 因此,您需要單獨處理各列並進行處理。
例如:
column1data = reshape(C(:,1),301,113);
column2data = reshape(C(:,2),301,113);
如果每次要加載數據文件時都沒有更改,則也可以考慮將文件轉換為二進制格式。 然后,您可以更快地加載它。 或者,您可以像下面的函數中那樣進行“透明二進制轉換”。 僅在第一次加載數據時,速度會很慢。 隨后的一切都會很快。
function Data = ReadTextFile(FileName,NColumns)
MatFileName = sprintf('%s.mat',FileName); % binary file name
if exist(MatFileName,'file')==2 % if it exists
S = load(MatFileName,'Data'); % load it instead of
Data = S.Data; % the original text file
return;
end
fh = fopen(FileName); % if binary file does not exist load data ftom the original text file
fh_closer = onCleanup( @() fclose(fh) ); % the file will be closed properly even in case of error
Data = fscanf(fh, repmat('%f ',1,NColumns), [NColumns,inf]);
Data = Data';
save(MatFileName,'Data'); % and make binary "chache" of the original data for faster subsequent reading
end
更改原始數據文件后,請不要忘記刪除MAT文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.