Count size of groups of 1's
    5 views (last 30 days)
  
       Show older comments
    
    David AR
 on 3 May 2019
  
    
    
    
    
    Answered: Pablo Rozier-Delgado
 on 13 Jul 2023
            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
0 Comments
Accepted Answer
  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
      
      
 on 29 Mar 2021
				David AR's comment moved here:
Thank you. The code works flawlessly. Best regards.
More Answers (1)
  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
0 Comments
See Also
Categories
				Find more on Loops and Conditional Statements in Help Center and File Exchange
			
	Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!