Count size of groups of 1's

6 Ansichten (letzte 30 Tage)
David AR
David AR am 3 Mai 2019
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

Akzeptierte Antwort

Erivelton Gualter
Erivelton Gualter am 3 Mai 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 Kommentar
Matt J
Matt J am 29 Mär. 2021
David AR's comment moved here:
Thank you. The code works flawlessly. Best regards.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Pablo Rozier-Delgado
Pablo Rozier-Delgado am 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

Kategorien

Mehr zu Loops and Conditional Statements finden Sie in Help Center und File Exchange

Produkte

Community Treasure Hunt

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

Start Hunting!

Translated by