我有一个大约80MB的文本文件。它有2个cols和6e6行。我想将数据导入MATLAB,但是与load函数有太多的数据。我一直在玩fopen函数,但无法正常工作。
理想情况下,我想获取第一批数据并导入,最终将它放在MATLAB中的一个大型数组中。如果那是不可能的,我想把它分成长度为34,013的数组。我也想为第二组数据做同样的事情。
答案 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文件。