2017-04-04 9 views
0

良い一日のMATLABのプロ、MATLAB:構造体の保存値

私が(単一の値)の長いリストを持って実行するすべてのループの配列に格納する必要があり、私のワークスペース内の変数。

ここでは簡単な例があります:ワークスペース内 変数:

a = 1; 
b = 2.2; 
c = 3.4; 
d = [0.5 0.7 1 1.2 1.5]; 
e = [-15 -10 -5 0 5 10 15 20]; 
serial = {'WTZ00151'}; 
model = {'336F'}; 

NameList = {'a';'serial';'model'}; 

1)ここで、私はData構造にのみ単一の値の変数を保存しています、しかし、私が何をしたいのですがどのようなすべてのためのものですループ、Data構造の配列に単一の値を保存します。私はループでこれを実行する場合

varList = who; 
Data = struct; 

fields = fieldnames(Data, '-full'); 
fieldSizes = structfun(@(field) length(field),Data); 

% removing arrays from structure 
for lst = 1:length(fieldSizes) 
    if fieldSizes(lst) > 1 
     Data = rmfield(Data,fields(lst)); 
    end 
end 

Data = 

     Data: [1x1 struct] 
     a: 1 
     b: 2.2000 
     c: 3.4000 
    index: 10 
    model: {'336F'} 
    serial: {'WTZ00151'} 

ので、for i = 1:5Dataは次のようになります。forループをコーディングする方法について

Data = 

     Data: [1x1 struct] 
     a: [1 1 1 1 1] 
     b: [1x5 double] 
     c: [1x5 double] 
    index: [10 10 10 10 10] 
    model: {1x5 cell} 
    serial: {1x5 cell} 

任意のアイデア?私が代わりに)構造にすべての変数を保存するためにwhoを使用して(と、不要なをフィルタリングで、収納ニーズ変数の長いリストを持っているワークスペース&にあまりにも多くの変数があるので

2)、どのように私ができます格納する必要のある変数名(テキストファイルからインポートしたもの:NameList)のリストを使用しますか? NameListの変数名を使用しても構造体の値は呼び出されません。感謝

、それはすぐに明らかではありません

答えて

2

実際にあなたのデータ構造を作成して、コードのどの部分。変数名の配列からstructを作成する方法はいくつかあります。

一つの方法は、保存する限りeval

for k = 1:numel(NameList) 
    Data.(NameList{k}) = eval(NameList{k}); 
end 

を使用することです別のオプションを(推奨されません)ファイルに関連する変数を保存し、struct

save('tmp.mat', NameList{:}); 
Data = load('tmp.mat'); 

に戻ってそれらをロードすることです複数の反復のデータを使用する場合は、structの配列ではなくの配列にstructのデータを格納することをおすすめします。下図のようにあなたは、インデックスとしてkを使用してアレイ内の各Dataインスタンスを格納することができる必要があります:

allData(k) = Data; 

あなたが本当に配列のstructをしたいことを決定した場合、あなたは常に、後でそれを変換することができます。

fields = fieldnames(allData); 

output = struct(); 

for k = 1:numel(fields) 
    % Try to just concatenate the values together 
    try 
     values = [allData.(fields{k})]; 

    % If that failed, concatenate them within a cell array 
    catch 
     values = {allData.(fields{k})}; 
    end 

    % Store this in a single output struct 
    output.(fields{k}) = values; 
end 
+0

優れた応答。ご助力ありがとうございます。 – Bensa

関連する問題