我在我的程序中使用了这一行:
...
A=zeros(x,y);
save 'A.txt' A -ascii;
B=zeros(x,y+1);
save 'B.txt' B -ascii;
但是当我运行它时,会发生内存溢出并且程序会崩溃。因为变量A
和B
非常大。
我想要一种像下面这样zeros(x,y)
直接保存到文件而不是使用内存的方法。
save 'A.txt' zeros(x,y) -ascii;
但这不起作用。
我在我的程序中使用了这一行:
...
A=zeros(x,y);
save 'A.txt' A -ascii;
B=zeros(x,y+1);
save 'B.txt' B -ascii;
但是当我运行它时,会发生内存溢出并且程序会崩溃。因为变量A
和B
非常大。
我想要一种像下面这样zeros(x,y)
直接保存到文件而不是使用内存的方法。
save 'A.txt' zeros(x,y) -ascii;
但这不起作用。
试试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
您可以一次附加每个元素或行,例如使用fprintf
:
A=zeros(10,20);
fid = fopen('test.txt','w');
for ii=1:numel(A)
fprintf(fid, '%f\n', A(ii));
end
fclose(fid);
如果您的文件全为零,则解决方案相当简单:
如果你的矩阵不是全零,那么问题就更有趣了。希望它是一个相当稀疏的矩阵,在这种情况下,这个问题有一些很好的答案:
在旁注中,根据您的代码何时阻塞,这也可能有所帮助(通常这是一个好主意):
否则你需要两倍的内存