Find length of a structure element and remove them according to length?

If I have a structure "output" with a field "output.I".
How can I check the lengths of all the output(1:end).I in one go and then remove the those rows from the structure that I do not require.
For example
output(1).I has a length of 100X1
output(2).I has a length of 200X1
output(3).I has a length of 100X1
I want to remove output(2).I = [] and my final structure to only have output(1).I and output(3).I
Please advise.

2 Comments

Do you want to remove the structure element, or just empty out the field? The latter can be easily solved with a loop (and there may be several methods to do it faster), while the first is quite tricky (and will cause your elements to be renumbered).
I want to remove the element. The indexing will be an issue and so I was thinking maybe there is an easy way to do it.

Sign in to comment.

 Accepted Answer

L = arrayfun(@(k) numel(output(k).I), 1:numel(output))
output(L > 100) = [] ; % remove those elements of the structure array

More Answers (2)

Simpler:
len = arrayfun(@(s)numel(s.I),output);
output(len>100) = []
Or simplest:
len = cellfun('length',{output.I});
output(len>100) = []
If I could I would accept all answers. Amazing guys! Thanks for the help.
Stephen Cobeldick, your code is really simple! Appreciate it.

Categories

Asked:

on 26 Mar 2018

Answered:

on 27 Mar 2018

Community Treasure Hunt

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

Start Hunting!