2013-02-25 241 views
1

我用这个线在我的计划:如何保存大数据量,而无需使用存储

... 
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; 

但是这不起作用。

回答

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

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

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

能够在内存中存储“A”。我不想在内存中拥有所有的'A'数组。 – ahoo 2013-02-26 03:22:13

+2

这只是一个演示,请阅读'fprintf'文档以了解如何实现这一点。 – bla 2013-02-26 07:16:38

0

如果你的文件全部为零的解决方案是相当简单:

  • 做一个循环,打印Ÿ零x次。

如果你的矩阵不是全部为零,问题会更加有趣。希望这是一个相当稀疏矩阵,在这种情况下,这个问题有一些很好的答案:

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

在阿里纳斯,这取决于当你的代码拥堵,这也可以帮助(和一般它是一个很好的想法):

  • 清除的作成乙

否则之前你在你的解决方案,VARI需要两倍的内存