1

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

使用 fread 时出错 内存不足。键入 HELP MEMORY 作为您的选项。

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

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

4

2 回答 2

3

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

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

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

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

这里的解决方案是告诉matlab将你正在读取的数据放入一个vector中uint8,可以如下实现:

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

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

于 2013-07-05T15:30:41.247 回答
1

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

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

于 2013-07-05T15:04:51.127 回答