我有一个矩阵形式的大型 MATLAB 文件(150MB)(即 4070x4070)。我需要在 MATLAB 中处理这个文件,但我似乎无法加载这个文件。我收到“内存不足”错误。有没有其他方法可以加载这种大小的文件?我使用的是 32 位处理器并有 2GB 的 RAM。请帮助我,我处理这个问题已经筋疲力尽了。
问问题
9478 次
3 回答
11
从版本 R2011b (ver.7.13) 开始,有一个新对象matlab.io.MatFile使用MATFILE作为构造函数。它允许在 MAT 文件中加载和保存部分变量。有关更多详细信息,请参阅文档。这是一个读取部分矩阵的简单示例:
matObj = matfile(filename);
a = matObj.a(100:500, 200:600);
如果您的原始文件不是 MAT 文件,而是某个文本文件,您可以部分读取它并使用matfile
将这些部分保存到 MAT 文件中的同一变量中以供以后访问。只需记住Writable
在构造函数中将属性设置为 true。
假设您的文本文件是制表符分隔的并且只包含数字,下面是一个示例脚本,用于按块读取数据并将它们保存到 MAT 文件:
blocksize = 100;
startrow = 0;
filename = 'test.mat';
matObj = matfile(filename,'Writable',true);
while true
try
a = dlmread(filename,'\t',startrow,0); %# depends on your file format
startrow = startrow + blocksize;
matObj.a(startrow+(1:blocksize),:) = a;
catch
break
end
end
我现在没有要测试的最新版本,但希望它应该可以工作。
于 2012-02-03T20:53:28.967 回答
3
如果它是一个图像文件,并且您想使用它,请尝试matlab 块处理。通过使用它,您将加载文件的一小部分。您的函数fun
将单独应用于每个块。
B = blockproc(src_filename,[M N],fun)
如果它是一个xml
文件,请与 - 一起尝试该XML DOM Node
模式SAX
(感谢@Nzbuu 指出这一点),但这似乎是一个未记录的功能。
此外,如果它是任何类型的文本文件(不太可能,由于数据量),请尝试使用外部工具进行拆分。
于 2012-02-03T19:07:56.437 回答