MATLAB: Split vector into smaller vectors, then separate

row-vectorsseparate vectorssmaller vectorsplitvectorvectors

I have a 240×1 cell, in each row there is a 1×1 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 (2×1) 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?

Best Answer

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'));