Count size of groups of 1's

4 views (last 30 days)
Hi all, this is my first question on the forum.
I have a vector called gpos that have 1's where I have a NaN value (gpos = isnan(data);)
For example
gpos = [1 1 1 0 0 1 1 0 1 1]'
I'd like to count the size of groups of 1's, like my expected result. How do I accomplish that? Thanks in advance.
result = [3 2 2]' % ignoring data that is zero

Accepted Answer

Erivelton Gualter
Erivelton Gualter on 3 May 2019
Here is a way you can perform this:
gpos = [1 1 1 0 0 1 1 0 1 1]';
[I, ~] = find(gpos == 1);
k = 0;
result = [];
for i=2:length(I)
if (I(i)-I(i-1)) ~= 1
result = [result; k+1];
k = 0;
else
k = k + 1;
end
end
result = [result; k+1];
disp(result);
But definetly, you might write something simpler .
  1 Comment
Matt J
Matt J on 29 Mar 2021
David AR's comment moved here:
Thank you. The code works flawlessly. Best regards.

Sign in to comment.

More Answers (1)

Pablo Rozier-Delgado
Pablo Rozier-Delgado on 13 Jul 2023
Another way, without for loop:
gpos = [1 1 1 0 0 1 1 0 1 1]'; % Detected NaNs
indGroups = bwlabel(gpos) + 1; % Label groups of ones and make it positive integers
result = accumarray(indGroups,gpos); % sum of each groups
result(result == 0) = [] % delete the 0 group
result = 3×1
3 2 2

Products

Community Treasure Hunt

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

Start Hunting!