簡體   English   中英

是否將大量數據導入MATLAB?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM