How to convert simple array to cell array with condition?

1 view (last 30 days)
Respected Sir,
I want to convert the array of size( 1*37) into cell array with constraint i.e., whenever in the array 1 is encountered array should start from next cell.
For example:
I have a array:
pop = [1 28 25 15 13 17 1 31 27 8 14 22 18 1 21 6 26 11 16 23 10 19 1 7 4 3 24 29 12 9 1 2 32 20 5 30 1]
the output in form of cell array should be:

Accepted Answer

Jan
Jan on 10 Apr 2022
Edited: Jan on 10 Apr 2022
pop = [1 28 25 15 13 17 1 31 27 8 14 22 18 1 21 6 26 ...
11 16 23 10 19 1 7 4 3 24 29 12 9 1 2 32 20 5 30 1];
m = find(pop == 1);
n = numel(m) - 1;
C = cell(1, n);
for k = 1:n
C{k} = pop(m(k):m(k+1));
end
C
C = 1×5 cell array
{[1 28 25 15 13 17 1]} {[1 31 27 8 14 22 18 1]} {[1 21 6 26 11 16 23 10 19 1]} {[1 7 4 3 24 29 12 9 1]} {[1 2 32 20 5 30 1]}
Alterntaively:
C = splitapply(@(x) {x}, pop, cumsum(pop == 1));
But then the trailing 1 is missing and appendig it manually is a mess.
  1 Comment
ANURAG DEEPAK
ANURAG DEEPAK on 10 Apr 2022
Thank you sir for timely response.
Yes sir, the altenative method is providing 1 in seperate cell.

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!