Count size of groups of 1's

5 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

Produkte

Community Treasure Hunt

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

Start Hunting!

Translated by