Split vector into smaller vectors, then separate

1 view (last 30 days)
I have a 240x1 cell, in each row there is a 1x1 struct. In each struct there are 5 fields, one of these is 'name' that can be target, notTarget, gap (these are the 3 possible names). The order is always the same (as concerning the name field): target or not target gap target or not target gap ....
I should split this vector in smaller vectors (2x1) made with a target (or not target) and a gap. Then I should separate the two different group of vectors: one with target, one with notTarget. Can anyone help me please?
  2 Comments
Stephen23
Stephen23 on 8 Feb 2016
Edited: Stephen23 on 8 Feb 2016
I would suggest that you convert your data in a non-scalar structure, then your task become easier using basic indexing and commands. The best solution would be to get rid of the cell array entirely, and have just one non-scalar structure. This will simplify your code and make is more efficient.

Sign in to comment.

Accepted Answer

Guillaume
Guillaume on 8 Feb 2016
As per Stephen's comment, convert your cell array into a non-scalar structure (it should use more or less the same amount of memory:
c = {struct('name', 'target', 'idx', 1);
struct('name', 'not target', 'idx', 2);
struct('name', 'target', 'idx', 3)}; %for example
%convert c into non-scalar structure
ns = vertcat(c{:}); %concatenate all the structures into one.
If you want to split the non-scalar structure into two structures, it's dead easy:
targets = ns(strcmp({ns.name}, 'target'));
nottargets = ns(strcmp({ns.name}, 'not target'));

More Answers (0)

Categories

Find more on Cell Arrays in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!