saveコマンドを用いて変数をmatファイルに保存する場合にfigureの保存を除く方法
18 ビュー (過去 30 日間)
古いコメントを表示
ワークスペースの変数のみを保存したいのですが、saveコマンドを使用すると表示されているfigureも保存されてしまいます。
変数のみを保存する方法はありますでしょうか。ご教示お願いします。
■条件
・保存したい変数は無数にある。
・保存したくないfigureのハンドルは分かる。
・figureを一時的に消すのは避けたい。
■類似の質問
・2014b で save(uisave)を用いてmat fileを保存する際、figure を保存しないようにするためにはどうすればいいですか?https://jp.mathworks.com/matlabcentral/answers/170836-2014b-save-uisave-mat-file-figure
0 件のコメント
採用された回答
Atsushi Ueno
2021 年 5 月 17 日
whs = whos; % ワークスペースの変数をサイズおよびタイプと共に一覧表示する
whs(ismember({whs.class}, 'matlab.ui.Figure')) = []; % 一覧からクラスが'matlab.ui.Figure'の変数を削除する
wh = {whs.name}; % 一覧から残った変数名のみ取り出す
save('matlab.mat', wh{:}); % 残った変数のみmatファイルに保存する
clear whs wh; % このコードで使った変数を削除する
上記は「figureハンドル以外の変数を選択してsaveコマンドでmatファイルに保存する」コードの例です。
質問にて挙げられた「類似の質問」や「saveコマンド」の仕様を読む限り、現在のワークスペースにあるすべての変数を保存する機能を使用せず、保存すべき変数名を明示的に指定するしか方法が無いと思います。
saveコマンドで一度に複数の変数を保存する方法は、下記を参考にしました。
2 件のコメント
Atsushi Ueno
2021 年 5 月 18 日
編集済み: Atsushi Ueno
2021 年 5 月 18 日
捕捉:保存したくないものに共通した項目があれば、まとめて処理出来ます。
下記はwhosコマンドの出力例です。
>> whos
Name Size Bytes Class Attributes
f 1x1 8 matlab.ui.Figure
p 1x1 8 matlab.graphics.chart.primitive.Line
txt1 1x1 8 matlab.graphics.primitive.Text
x 1x41 328 double
y 1x41 328 double
下記はclassが文字列"matlab.(ui|graphics)."を含むものを保存対象から外す例です。
whs = whos;
whs(contains({whs.class}, 'matlab.ui.')) = [];
whs(contains({whs.class}, 'matlab.graphics.')) = [];
wh = {whs.name};
save('matlab.mat', wh{:});
clear whs wh;
上記の例で実行すると、f,p,txt1は保存されず、xとyのみがmatファイルに保存されます。
MATLABはいいぞ
その他の回答 (0 件)
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!