2016-09-24 22 views
3

サイズがn * 1の構造体があり、複数のフィールドの1つが「領域」と呼ばれるものとします。以下のコードを試してみます:Matlabのn * 1構造体の特定のフィールドからすべての値を抽出する方法

area = I.area 

結果の領域には構造体の最後の位置からの値しかありません。フィールド内のすべての値を強要するために任意の高速な方法は、次のようにforループを使用したことを除いて、そこにある:

for ii = 1:n; area(ii) = I(ii).area; end 

答えて

1

のすべての値の水平方向の連結になります簡単な[]構造体の周りに使用します。代わりに別のディメンションに沿って連結する場合は、catを使用してこれを明示的に指定することができます。これにより、複数の値を含むフィールドをより適切に処理できます。

% Concatenate them along the first dimension 
out = cat(1, I.area); 

% Concatenate them along the third dimension 
out = cat(2, I.area); 

あるいはフィールドは全て異なる寸法であれば、その後エリアフィールドは、I(1)のように、各位置に1つの値を有する場合、それが動作cell

out = {I.area}; 
+0

あなたの答えをありがとう! – jingweimo

1
area = [I.area] 

I.areaリターンI(1).areaのすべての値、I(2).areaは...コンマ区切りのリストとして、これそのようなリストが期待されるところなら、どこにでも差し込めます。関数のパラメータリストまたは配列の初期化。

編集:すべてI(i).areaが等しいサイズの行ベクトルの場合。そして、あなたは、まず所望の寸法に再構築、水平にそれらのすべてを連結することができます:

area = reshape([I.area], [2 length(I)])' 

結果:

>> I.area 

ans = 

    3  4 


ans = 

    5  6 


ans = 

    7  8 

>> reshape([I.area], [2 length(I)])' 

ans = 

    3  4 
    5  6 
    7  8 
+0

にそれらを回します.area = 1。エントリに2つの値I(1).area = [1,2]がある場合はどうなりますか?列または行に整形されるのではなく、行列として構成されているように、これらの値を抽出することは可能ですか?例: – jingweimo

+0

I(1).area = [1,2]、I(2).area = [3,4]の場合、出力は[1、2; 3,4]。 – jingweimo

+0

もし 'area'が2x1ベクトルである場合に対処するつもりなら、次回の質問で明示的に回答者があなたが本当に意味するものを推測する必要がないようにしてください。そして、この行 'area(ii)= I(ii).area;は' I.area'がスカラーであることを強く示唆します。とにかく、 'reshape'でベクトル' area'を簡単に扱うことができます。私はそれを反映するために私の答えを編集しました。 –

関連する問題