2013-02-25 81 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需要兩倍的內存

相關問題