0

構造体の複数のフィールドからアイテムを抽出し、それらを一意に適用された配列に配置したいと考えています。

構造が次の形式であるとします。

A=repmat( struct('field1',[],'field2',[],'field3',[]) ,100,1);

一意のフィールド 1 とフィールド 2 を抽出するには、次のように記述できます。

[a ia iar]=unique([A(:).field1]);
b=[A(:).field2];
b=b(ia);

私はこのようなものを書きたいと思います:

[a ia iar]=unique([A(:).field1]);
b=[A(:).field2](ia);

しかし、Matlab (2012a) では、配列を関数に問題なく渡すことはできますが、宣言時に配列内の項目にアクセスすることは許可されていないようです。これを行う方法はありますか?

ありがとう、

デビッド

4

1 に答える 1

0

プレーンな MATLAB構文は中間結果のネストされたインデックス作成をサポートしていませんが、EitanT のコメントで指摘されているように、多くの方法があります。

ただし、あなたの場合、以下の例に示すようにそれらは必要ありません。非スカラー構造にインデックスを付けることができます。

% Example input and unique according to 'field1'
A       = struct('field1',num2cell(randi(20,100,1)),'field2',num2cell(randi(20,100,1)));
[~, ia] = unique([A(:).field1]);

% First assign
b1 = [A(:).field2];
b1 = b1(ia);

% Select directly
b2 = [A(ia).field2];

isequal(b1,b2) %ok
于 2013-05-16T19:05:34.270 に答える