我必须读取一个大小为92,504 KB的大型二进制文件。当我使用fread命令时,MATLAB给出了错误:
使用fread内存时出错。键入HELP MEMORY以获取选项。
我也尝试重新启动MATLAB,这样如果我使用任何虚拟内存,它应该被清除,但问题仍然存在。
如何解决读取数据的问题。
答案 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位系统。