Composing arrayfun syntax to extract data from structure

2 ビュー (過去 30 日間)
Milos
Milos 2012 年 11 月 13 日
Here is a simplified example of structure:
C(1,1).idx = [1;1;2;3];
C(2,1).idx = [1;1;2];
C(1,1).s = {'a';'a';'ab';'abc'};
C(2,1).s = {'a';'a';'ab'};
now, find unique idx in structure C:
[ua,ia,~] = arrayfun(@(x) unique(x.idx, 'rows'), C, 'UniformOutput', false);
How do I apply indexes ia to extract corresponding values in s fields? I can think of for loop but is there some arrayfun trick? Side note, in my real data idx is nx4 matrix therefore 'rows' argument.
  5 件のコメント
Milos
Milos 2012 年 11 月 13 日
@Matt & @ Sean
I realize ARRAYFUN is slower in many cases, just trying to warp my head around ARRAYFUN and its use.
Milos
Milos 2012 年 11 月 13 日
@Azzi
In my example:
ia{1,1} = [2;3;4];
ia{2,1} = [2;3];
Now, how would you, using indexes ia and ARRAYFUN, extract corresponding values from field s?

サインインしてコメントする。

採用された回答

Matt Fig
Matt Fig 2012 年 11 月 13 日
編集済み: Matt Fig 2012 年 11 月 13 日
O.k., if you are just messing around with ARRAYFUN.
C(1,1).idx = [1;1;2;3];
C(2,1).idx = [1;1;2];
C(1,1).s = {'a';'a';'ab';'abc'};
C(2,1).s = {'a';'a';'ab'};
[ua,ia,~] = arrayfun(@(x) unique(x.idx,'rows'),C,'Un',0);
V = arrayfun(@(x) C(x).s(ia{x}),1:length(C),'Un',0)

その他の回答 (1 件)

Walter Roberson
Walter Roberson 2012 年 11 月 13 日
arrayfun(@(rowidx,idx) C(rowidx).s(idx{1}), 1:size(C,1), ia, 'UniformOutput', false)
or perhaps this might work:
arrayfun( @(idx, s) s{idx{1}}, ia, {C.s}, 'UniformOutput', false)

カテゴリ

Help Center および File ExchangeData Types についてさらに検索

製品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by