2016-04-17 15 views
0

私は、配列がA、要素数が100である問題に取り組んでいます。 これらの要素はすべて時間とともに変化しています。 私のワークスペースでは、時間サイクル全体が実行された後で、これらの要素の最終値のみを取得します。動的変数をワークスペースからMATLABの別ファイルに保存する方法は?

私は別のファイル(.txtまたは.mat)に時間を使って値を保存しようとしています。そのファイルにアクセスして、変数が時間とともにどのように変化するかを確認します。

私は、次のコマンドをしようとしている:

save('file.mat','A','-append'); 

をしかし、このコマンドは、私のファイル内の既存の値を上書きします。

これらの値を上書きせずに保存し、MATLABでそれらの値にアクセスする方法を教えてください。

答えて

0

ファイルに保存する(-appendを使用しても)フラグが機能しないのは、変数Aが既にファイル内に存在し、ループを通過するたびに上書きされるためです。これが起こらないようにするたびに、ループを介して毎回新しいファイルまたは新しい変数名を作成する必要があります。

結果をファイルに保存することは、恐らく時変値Aを保存する最善の方法ではありません。 Aのすべての中間値を格納するには、セル配列を使用する方がよいでしょう。

A_over_time = cell(); 

for k = 1:n 
    %// Get A somehow 
    A_over_time{k} = A; 
end 

Aが何であるかに応じて、あなたはまた、数値配列またはマトリックスにAの値を格納することができます。

%// Using an array 
A_over_time = zeros(N, 1); 
for k = 1:N 
    A_over_time(k) = A; 
end 

%// Using a matrix 
A_over_time = zeros(N, numel(A)); 
for k = 1:N 
    A_over_time(k,:) = A; 
end 
+0

お返事ありがとうございます。私の配列のすべての中間値を行列に保存したくない理由は、多数の値があり、行列の大きさが大きすぎるためです。私はそれが非能率的かつ時間のかかる解決につながるのではないかと心配しています。 –

+0

@RiderVもしそれらが本当に大きければ(どれくらいの大きさで話していますか?)、それらをディスクからロードすることはさらに遅くなります。 – Suever

2

はまた、反復ごとに一意でなければ、出力ファイル名を変更することができます。

for iter=1:n 
    A = rand(10); 
    save(sprintf('file%d.mat',iter), 'A'); 
end 

その方法は、各反復は、一つのファイルを作成します。

関連する問題