2

一部のデータ収集にMatlabを使用していますが、試行ごとにデータを保存したいと考えています(何か問題が発生した場合に備えて)。データは、基本的に次の形式で、セル配列のセル配列として編成されます。

data{target}{trial} = zeros(1000,19)

しかし、実際のデータはコレクションの終わりまでに 150 MB を超えるため、各試行の後にすべてを保存すると非常に遅くなります。そのため、データの一部のみを保存できるマットファイル アプローチ ( http://www.mathworks.de/de/help/matlab/ref/matfile.html ) を選択することを検討しています。問題: これはセル配列のセルをサポートしていません。つまり、1 回の試行でデータを変更/更新できませんでした。ターゲットのデータ全体 (100 回の試行) を再保存する必要があります。

だから、私の質問:

セル配列の一部を保存して保存を高速化するために使用できる別の方法はありますか?

(また)

この保存プロセスで機能するデータをフォーマットするより良い方法はありますか?

4

3 に答える 3

0

アップデート:

実際には、セル配列ではなく、セル配列にインデックスを付けることが可能であるように見えます。したがって、データを少し異なる方法で保存すると、データmatfileの一部のみを更新するために使用できるように見えます。次の例を参照してください。

x = cell(3,4);
save x;
matObj = matfile('x.mat','writable',true);
matObj.x(3,4) = {eye(10)};

これによりバージョンの警告が表示されることに注意してください。ただし、機能しているようです。

これでうまくいくことを願っています。ただし、さらに役立つ可能性があるため、私の回答の次の部分を調べてください。


計算では、通常、反復ごとにディスクに保存する必要はありません。スピードアップを得る簡単な方法 (多少のリスクは伴います) は、n 回の試行ごとに保存することです。

たとえば、次のようにします。

maxTrial = 99;
saveEvery = 10;

for trial = 1:maxTrial
   myFun; %Do your calculations here
   if trial == maxTrial || mod(trial, saveEvery) == 0
      save %Put your save command here
   end
end

データが常に特定のサイズ (またはその範囲内) である場合は、データを cell 配列ではなく行列に保存することも選択でき、インデックスを使用してファイルの一部のみを保存できます。

于 2013-09-27T09:57:36.690 に答える