如何在不使用内存的情况下保存大数据

时间:2013-02-25 19:20:02

标签: matlab save large-data

我在我的程序中使用了这一行:

...
A=zeros(x,y);
save 'A.txt' A -ascii;
B=zeros(x,y+1);
save 'B.txt' B -ascii;

但是当我运行它时,会发生内存溢出,程序将崩溃。因为变量AB非常大。

我想要一种类似下面的方式,将zeros(x,y)直接保存到文件而不是使用内存。

save 'A.txt' zeros(x,y) -ascii;

但这没效果。

3 个答案:

答案 0 :(得分:4)

尝试使用MATFILE个对象。然后,您可以按部件将数据保存到mat文件中的变量中。

filename = 'test.mat';
matObj = matfile(filename,'Writable',true);
n = 1000;
for k=1:n
    matObj.A(k,1:n) = zeros(1,1000);
end

答案 1 :(得分:1)

您可以一次附加每个元素或行,例如使用fprintf

A=zeros(10,20);
fid = fopen('test.txt','w');
for ii=1:numel(A)
fprintf(fid, '%f\n', A(ii));
end  
fclose(fid);

答案 2 :(得分:0)

如果您的文件全为零,则解决方案非常简单:

  • 制作一个循环,打印y次0次。

如果您的矩阵不是全零,则问题会更有趣。希望它是一个非常稀疏的矩阵,在这种情况下,这个问题有一些很好的答案:

How can I save a very large MATLAB sparse matrix to a text file?

在旁注中,根据您的代码何时堵塞,这也可能有所帮助(通常这是一个好主意):

  • 在创建B之前清除A

否则你需要两倍的内存