サイズがn * 1の構造体があり、複数のフィールドの1つが「領域」と呼ばれるものとします。以下のコードを試してみます:Matlabのn * 1構造体の特定のフィールドからすべての値を抽出する方法
area = I.area
結果の領域には構造体の最後の位置からの値しかありません。フィールド内のすべての値を強要するために任意の高速な方法は、次のようにforループを使用したことを除いて、そこにある:
for ii = 1:n; area(ii) = I(ii).area; end
サイズがn * 1の構造体があり、複数のフィールドの1つが「領域」と呼ばれるものとします。以下のコードを試してみます:Matlabのn * 1構造体の特定のフィールドからすべての値を抽出する方法
area = I.area
結果の領域には構造体の最後の位置からの値しかありません。フィールド内のすべての値を強要するために任意の高速な方法は、次のようにforループを使用したことを除いて、そこにある:
for ii = 1:n; area(ii) = I(ii).area; end
のすべての値の水平方向の連結になります簡単な[]
構造体の周りに使用します。代わりに別のディメンションに沿って連結する場合は、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};
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
にそれらを回します.area = 1。エントリに2つの値I(1).area = [1,2]がある場合はどうなりますか?列または行に整形されるのではなく、行列として構成されているように、これらの値を抽出することは可能ですか?例: – jingweimo
I(1).area = [1,2]、I(2).area = [3,4]の場合、出力は[1、2; 3,4]。 – jingweimo
もし 'area'が2x1ベクトルである場合に対処するつもりなら、次回の質問で明示的に回答者があなたが本当に意味するものを推測する必要がないようにしてください。そして、この行 'area(ii)= I(ii).area;は' I.area'がスカラーであることを強く示唆します。とにかく、 'reshape'でベクトル' area'を簡単に扱うことができます。私はそれを反映するために私の答えを編集しました。 –
あなたの答えをありがとう! – jingweimo