Count size of groups of 1's
2 ビュー (過去 30 日間)
古いコメントを表示
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 件のコメント
採用された回答
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
2021 年 3 月 29 日
David AR's comment moved here:
Thank you. The code works flawlessly. Best regards.
その他の回答 (1 件)
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
0 件のコメント
参考
カテゴリ
Help Center および File Exchange で Get Started with MATLAB についてさらに検索
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!