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

3 に答える 3

4

MATFILEオブジェクトを試してください。次に、データをパーツごとにマットファイルの変数に保存できます。

filename = 'test.mat';
matObj = matfile(filename,'Writable',true);
n = 1000;
for k=1:n
    matObj.A(k,1:n) = zeros(1,1000);
end
于 2013-02-25T19:31:57.707 に答える
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);
于 2013-02-25T19:21:46.920 に答える
0

ファイルがすべてゼロの場合、解決策はかなり簡単です。

  • y個のゼロをx回出力するループを作成します。

行列がすべてゼロではない場合、問題はもう少し興味深いものになります。うまくいけば、それはかなりスパースな行列です。その場合、この質問にはいくつかの良い答えがあります。

非常に大きなMATLABスパース行列をテキストファイルに保存するにはどうすればよいですか?

ちなみに、コードが詰まる時期によっては、これも役立つ場合があります(一般的には良い考えです)。

  • Bを作成する前にAをクリアする

それ以外の場合は、2倍のメモリが必要です

于 2013-02-26T17:14:35.827 に答える