How to group logical numbers in a vector?

I am trying to count how many groups of ones in a vector. Number 1 repeated three times in three positions in this vector.
Vector = [1 1 1 0 0 0 0 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1 1];
The expected answer is
Num_gr_1 = 3
Could you help please?

2 Comments

@Khaldon Qaid, Num_gr_1 = sum(Vector>[Vector(2:end) 0]);
Thank you for your help.

Sign in to comment.

 Accepted Answer

Use this:
Vector = logical( [1 1 1 0 0 0 0 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1 1] );
Num_gr_1=max(groupTrue(Vector))
Num_gr_1 = 3

More Answers (2)

>> num_gr_1=sum(diff(Vector)==1)+(Vector(1)==1)
num_gr_1 =
3
>>
There are FEX submissions for runlength encoding that will give you all the details besides just the number of groups asked for here...if you want/need the locations of the groups,
>> gr_1=find([0 diff(Vector)]==1)
gr_1 =
1 8 18
>>
Above is specific for [0, 1]; the FEX submissions will find any/all runs. The above logic will deal with any specific values by converting the input vector to logical based on the looked-for value, but that's the limit to its flexibility.
But, it's quick/simple for the specific task.
If you have the Image Processing Toolbox you can label each group and count them in a single line of code with bwlabel :
Vector = [1 1 1 0 0 0 0 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1 1]; % Sample data
[L, Num_gr_1] = bwlabel(Vector) % Label groups and count groups.
L = 1×23
1 1 1 0 0 0 0 2 2 2 2 2 0 0 0 0 0 3 3 3 3 3 3
Num_gr_1 = 3

Categories

Products

Release

R2021b

Asked:

on 12 Jun 2022

Commented:

on 13 Jun 2022

Community Treasure Hunt

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

Start Hunting!