我必须读取一个大小为 92,504 KB 的大型二进制文件。当我使用 fread 命令时,MATLAB 给了我错误:
使用 fread 时出错 内存不足。键入 HELP MEMORY 作为您的选项。
我也尝试重新启动 MATLAB,这样如果我使用任何虚拟内存,它应该被清除,但问题仍然存在。
如何解决这个读取数据的问题。
我必须读取一个大小为 92,504 KB 的大型二进制文件。当我使用 fread 命令时,MATLAB 给了我错误:
使用 fread 时出错 内存不足。键入 HELP MEMORY 作为您的选项。
我也尝试重新启动 MATLAB,这样如果我使用任何虚拟内存,它应该被清除,但问题仍然存在。
如何解决这个读取数据的问题。
问题是您用来读取数据的代码:
[data,count] = fread(fid,'uint8');
上面的行告诉 matlab 尽可能多地读uint8s
入并将它们放入一个向量中。
麻烦的是matlab会将它放入一个双精度向量中。因此,不是每个元素为一个字节的向量,而是每个元素为 8 个字节的向量。这最终使您的 92Mb 数据占用 92*8 = 736mb,这可能会大于memory
命令显示的最大可能数组大小。
这里的解决方案是告诉matlab将你正在读取的数据放入一个vector中uint8
,可以如下实现:
[data,count] = fread(fid,'*uint8');
这种读入数据的方法告诉 matlab 输出向量应该与输入数据的类型相同。您可以在fread 文档的精确部分阅读更多相关信息。
在 32 位系统中,可供 MATLAB 使用的内存可能非常少。您正在使用的 fread 命令一次读取整个文件。这可能是个坏主意,因为您的系统没有足够的内存。更好的实现方法是逐部分读取文件。请参阅
A = fread(fileID, sizeA)
下面的链接 [1]。您可以将此代码放入循环中。如果您想一次读取整个文件,我建议使用具有 3GB RAM 的 64 位系统。