すでに発見したように、MATLABの構造体配列のデフォルトの表示では、配列の次元とフィールド名だけがわかります。内容を確認したい場合は、フォーマットされた出力を自分で作成する必要があります。これを行う1つの方法は、STRUCT2CELLを使用してセル配列の構造コンテンツを収集し、次にFPRINTFを使用してセルコンテンツを特定の形式で表示することです。次に例を示します。
>> regions = struct('State',{'New York'; 'Ohio'; 'North Carolina'},...
'Capital',{'Albany'; 'Columbus'; 'Raleigh'},...
'Population',{97856; 787033; 403892}); %# Sample structure
>> cellData = struct2cell(regions); %# A 3-by-3 cell array
>> fprintf('%15s (%s): %d\n',cellData{:}); %# Print the data
New York (Albany): 97856
Ohio (Columbus): 787033
North Carolina (Raleigh): 403892
2番目の質問に関しては、セル配列のフィールドからエントリを収集し、STRCMPを使用'State'
してそれらを特定の名前と比較して論理インデックスを取得し、対応する構造体配列要素を取得できます。
>> stateNames = {regions.State}; %# A 1-by-3 cell array of names
>> stateIndex = strcmp(stateNames,'Ohio'); %# Find the index for `Ohio`
>> stateData = regions(stateIndex) %# Get the array element for `Ohio`
stateData =
State: 'Ohio'
Capital: 'Columbus'
Population: 787033
ノート:
コメントで述べたよう'Population'
に、構造体配列の各エントリには、50行1列の母集団データのベクトル全体が含まれることになります。これはfile{3}
、サンプルコードにベクトルが含まれているのに対しfile{1}
、セル配列file{2}
が含まれていることが原因である可能性があります。ベクトルの内容を構造体配列の要素全体に適切に分散するには、ベクトルを分割し、各値をNUM2CELLを使用してセル配列の個別のセルに配置してから、 STRUCTに渡す必要があります。このように定義すると、問題が解決するはずです。file{3}
Population
Population = num2cell(file{3});