Count size of groups of 1's

조회 수: 2 (최근 30일)
David AR
David AR 2019년 5월 3일
답변: Pablo Rozier-Delgado 2023년 7월 13일
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

채택된 답변

Erivelton Gualter
Erivelton Gualter 2019년 5월 3일
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
Matt J
Matt J 2021년 3월 29일
David AR's comment moved here:
Thank you. The code works flawlessly. Best regards.

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Pablo Rozier-Delgado
Pablo Rozier-Delgado 2023년 7월 13일
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

카테고리

Help CenterFile Exchange에서 Get Started with MATLAB에 대해 자세히 알아보기

제품

Community Treasure Hunt

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

Start Hunting!

Translated by