在MATLAB中读取大型二进制文件时出错

时间:2013-07-05 11:23:53

标签: matlab file-io binaryfiles large-files

我必须读取一个大小为92,504 KB的大型二进制文件。当我使用fread命令时,MATLAB给出了错误:

  

使用fread内存时出错。键入HELP MEMORY以获取选项。

我也尝试重新启动MATLAB,这样如果我使用任何虚拟内存,它应该被清除,但问题仍然存在。

如何解决读取数据的问题。

2 个答案:

答案 0 :(得分:3)

问题是您用来读取数据的代码:

[data,count] = fread(fid,'uint8');

上面的行告诉matlab尽可能多地读入uint8s并将它们放入向量中。

麻烦的是matlab会将它放入双打矢量中。因此,不是每个元素都是一个字节的向量,而是有一个向量,其中每个元素是8个字节。这最终会使92Mb的数据占用92 * 8 = 736mb,这可能会大于memory命令显示的最大可能数组大小。

这里的解决方案是告诉matlab将您正在阅读的数据放入uint8的向量中,这可以通过以下方式实现:

[data,count] = fread(fid,'*uint8');

这种读取数据的方法告诉matlab输出向量应该与输入数据的类型相同。您可以在fread documentation的精确部分阅读更多相关信息。

答案 1 :(得分:1)

在32位系统中,MATLAB可用的内存可能非常少。您正在使用的fread命令一次读取整个文件。这可能是一个坏主意,因为您的系统没有足够的内存。更好的实现方式是逐个读取文件。看到,    A = fread(fileID, sizeA) 在下面的链接[1]。您可以将此代码放在循环中。如果你想一次读取整个文件,我建议使用带有3GB RAM的64位系统。

[1] http://www.mathworks.in/help/matlab/ref/fread.html