我正在尝试将大型文本文件(几百万行)读入 Matlab。最初我使用的是 importdata(file_name),这似乎是一个简洁的解决方案。但是我需要使用 Matlab 7(是的,我知道它很旧)而且似乎不支持 importdata。因此,我尝试了以下操作:
while ~feof(fid)
fline = fgetl(fid);
fdata{1,lno} = fline ;
lno = lno + 1;
end
但这真的很慢。我猜是因为它在每次迭代时都会调整数组的大小。有没有更好的方法来做到这一点。请记住,输入数据的前 20 行是字符串类型数据,其余数据是 3 到 6 列十六进制值。
最佳答案
你将不得不做一些 reshape ,但你的另一个选择是你可以使用 fread。 但正如所提到的,这实质上将您锁定在矩形导入中。所以另一种选择是使用文本扫描。正如我在另一条注释中提到的,我不是 100% 确定它是何时实现的,我所知道的是你没有“importdata()”
fid = fopen('textfile.txt')
Out = textscan(fid,'%s','delimiter',sprintf('\n'));
fclose(fid)
通过使用 textscan,您将能够为每一行获取一个字符元胞数组,然后您可以根据需要对其进行操作。正如我在评论中所说,线条是否相同不再重要。现在您可以更快地解析元胞数组。但正如 gnovice 提到的那样,他也确实有一个非常优雅的解决方案,你可能不得不关心内存需求。
如果可以避免的话,您永远不想在 matlab 中使用的一件事是循环结构。它们在 C/C++ 等中速度很快,但在 matlab 中,它们是到达目的地最慢的方式。
编辑:刚刚查了一下,看起来 textscan 是在版本 7 (R14) 中按字面意义实现的,所以如果那是你拥有的,你应该很好地使用它。
关于file - 在 Matlab 中读取和处理大文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5953182/