将大量数据导入MATLAB?

时间:2014-07-24 20:55:02

标签: matlab memory text-files large-files

我有一个大约80MB的文本文件。它有2个cols和6e6行。我想将数据导入MATLAB,但是与load函数有太多的数据。我一直在玩fopen函数,但无法正常工作。

理想情况下,我想获取第一批数据并导入,最终将它放在MATLAB中的一个大型数组中。如果那是不可能的,我想把它分成长度为34,013的数组。我也想为第二组数据做同样的事情。

2 个答案:

答案 0 :(得分:2)

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); 

答案 1 :(得分:0)

如果每次要加载数据文件时数据文件没有更改,您也可以考虑将文件转换为二进制格式。然后你会以更快的速度加载它。 或者您可以像下面的函数一样进行“透明二进制转换”。只有第一次加载数据才会很慢。随后的所有事情都会很快。

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文件。