Composing arrayfun syntax to extract data from structure

1 次查看(过去 30 天)
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 CenterFile Exchange 中查找有关 Data Types 的更多信息

产品

Community Treasure Hunt

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

Start Hunting!

Translated by