我正在尝试将大文本文件(几百万行)读入Matlab.最初我使用的是importdata(file_name),这似乎是一个简洁的解决方案.但是我需要使用Matlab 7(是的,我知道它的旧版本),似乎不支持importdata.因此我尝试了以下方法:
while ~feof(fid)
fline = fgetl(fid);
fdata{1,lno} = fline ;
lno = lno + 1;
end
Run Code Online (Sandbox Code Playgroud)
但这真的很慢.我猜它是因为它在每次迭代时调整数组大小.有没有更好的方法来做到这一点.请记住,输入数据的前20行是字符串类型数据,其余数据是3到6列十六进制值.
你将不得不做一些重塑,但另一个选择是你可以使用fread.但正如所提到的,这基本上将您锁定为矩形导入.所以另一个选择是使用textscan.正如我在另一篇文章中提到的那样,我不是百分之百确定实施的时候,我所知道的是你没有"importdata()"
fid = fopen('textfile.txt')
Out = textscan(fid,'%s','delimiter',sprintf('\n'));
fclose(fid)
Run Code Online (Sandbox Code Playgroud)
通过使用文本扫描,您将能够获得每行的单元格数组,然后您可以根据需要进行操作.正如我在评论中所说的那样,线条长度是否相同并不重要.现在,您可以更快地解析单元阵列.但正如gnovice所提到的,他也确实有一个非常优雅的解决方案,你可能不得不关注内存需求.
如果你能避免它,你永远不想在matlab中使用的一件事就是循环结构.它们在C/C++等方面速度很快,但在matlab中,它们是获取目标的最慢方式.
编辑:只是查了一下,看起来文本可以在版本7(R14)中实现字面意思,所以如果这就是你所拥有的,你应该很好用.