MATLAB ワークスペースの使い方
8 views (last 30 days)
Show older comments
セル配列の変数と値をワークスペースに登録したいです。
例
data{1,1}:文字列変数 A,B,Cなど
data{1,2}:数値 1,2,3など
で、ワークスペースに
A=1
B=2
C=3
と登録したいです。
0 Comments
Accepted Answer
Tak
on 21 Feb 2024
Edited: Tak
on 21 Feb 2024
以前の質問 でも回答しましたし、Dyuman Joshi さんのコメント にもありますように、このように変数を作成するのは好ましくありません。どうしてもワークスペースに作成する変数名と値を、セル配列で管理・指定する必要がある のであれば eval や assignin を使う必要があります。
どちらのドキュメントにも記載されていますが コードが分かりにくくなったり、予期しない結果が発生する可能性があります ので注意してください。
data の 1列目に変数名, 2列目にデータが格納されたセル配列とした場合。
data = {'A', 1;
'B', 2;
'C', 3}
eval でのワークスペースへの変数作成
以前の質問と違い、変数名ではなく格納する値を文字列に変換してMATLAB式にしますので、有効桁数には注意が必要です。
for n=1:height(data)
eval([data{n,1} '=' num2str(data{n,2}) ';'])
end
assignin でのワークスペースへの変数作成
assignin は、ワークスペースや変数名、値を指定して変数を作成します。セル配列の要素ごとに assignin を実行する必要がありますので、これには cellfun をあわせて使います。
ws = repmat({'base'}, height(data), 1);
var = data(:,1);
val = data(:,2);
cellfun(@assignin, ws, var, val)
セル配列から構造体 を作成する
今回のように 名前でアクセスしたい のであれば構造体が望ましいです。
既にセル配列に格納されている名前や値から構造体を作成するには cell2struct を使います。
s = cell2struct(data(:,2), data(:,1), 1)
構造体フィールドに各値が格納されますので s.A, s.B ... または s.('A'), s.('B') のように記述することでアクセスできます。
その他の方法としては、いまセル配列で管理・運用している変数名や値を、CSVやJSON形式ファイルなどの外部ファイルにすることが可能でしたら、外部ファイルからインポートして構造体やテーブルを作成することもできます。
More Answers (0)
See Also
Categories
Find more on ビッグ データの処理 in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!