Composing arrayfun syntax to extract data from structure

4 ビュー (過去 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 ExchangeTime Series Objects についてさらに検索

製品

Community Treasure Hunt

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

Start Hunting!

Translated by