Group number identification consecutive numbers

Hello
I have millions of 1-0 data in my database. I need to detect groups of consecutive units. I would like to ask you to create the attribute "Gr_numb". An example is given in the attached file. The searched attribute is calculated there. But in Excel it is very complicated and unusable for a large database.
Thank You

6 件のコメント

Image Analyst
Image Analyst 2022 年 11 月 11 日
I don't understand how you're getting group numbers. In your data matrix, many, many rows are all zeros yet you somehow come up with a group number for them, and different rows of zeros have different group numbers. How are you computing group numbers for those rows?
Bruno Luong
Bruno Luong 2022 年 11 月 11 日
@Image Analyst don't look at the row, look only the column
  • Input : (C ) Index
  • Desired output (B) Gr_number
Image Analyst
Image Analyst 2022 年 11 月 11 日
I still don't understand. Let's look at the upper left part of this matrix:
OK, so row 3 has a 3 in column 3, to Gr_numb is 3. But row 4 is also called group 3 in the Gr_numb column despite the fact that there in nothing in any of the columns except zeros. Why do rows 4 and 5 get assigned a group number of 3? Row 6 which was all zeros just like rows 4 and 5 is not assigned group 3. Why not?
Same for row 9. It's 3 in column 3 but a different 3 so why is it not a new group number? And why are rows 10 and 11 group 3 but not row 12???
Bruno Luong
Bruno Luong 2022 年 11 月 11 日
編集済み: Bruno Luong 2022 年 11 月 11 日
It replaces the consecutive 1s with the number of 1s in this interval
Example! there are three 1s in rows 3, 4, 5, they will be replaced by three 3s since the number of 1s is 3 (three the length of group of 1s).
Image Analyst
Image Analyst 2022 年 11 月 11 日
OK I think I see now, though it is probably a poor example since the second group and third groups both have a group label of 3. I don't see why two different groups should have the same group number, but the example would have been clearer if the third group had had 4 or 5 1's in it instead of 3 (same as the prior group). You must have the Mind Reading Toolbox Bruno.
Jan
Jan 2022 年 11 月 11 日
編集済み: Jan 2022 年 11 月 11 日
@Image Analyst: The term "group number" is misleading. "Number of group members" would be clearer.

サインインしてコメントする。

 採用された回答

Jan
Jan 2022 年 11 月 11 日
編集済み: Jan 2022 年 11 月 11 日

1 投票

index = [1 0 1 1 1 0 0 0 1 1 1 0 1 1 0 0 1 1];
[b, n] = RunLength(index);
m = n(b == 1);
Gr_numb = zeros(size(index));
GR_numb(index == 1) = RunLength(m, m);
If you do not have a C-compiler installed, use RunLength_M from this submission.
Or:
d = [true, diff(index) ~= 0]; % TRUE if values change
n = diff(find([d, true])); % Number of repetitions
m = n(index(d) == 1);
index(index == 1) = repelem(m, m)
index = 1×18
1 0 3 3 3 0 0 0 3 3 3 0 2 2 0 0 2 2

1 件のコメント

Marek Drliciak
Marek Drliciak 2022 年 11 月 21 日
移動済み: Bruno Luong 2022 年 11 月 21 日
Thank You very much. That was what I looking for.

サインインしてコメントする。

その他の回答 (1 件)

Stephen23
Stephen23 2022 年 11 月 11 日

3 投票

X = [1;0;1;1;1;0;0;0;1;1;1;0;1;1;0;0;1;1;0;1;0;0;1;1;0;1;1;1;1;0;1;1;1;1;1;;0;1;1;1;1;1;1;1;1;1;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0]
X = 65×1
1 0 1 1 1 0 0 0 1 1
D = diff([0;X;0]);
B = find(D>0);
E = find(D<0);
L = E-B;
G = X;
G(X==1) = repelem(L,L)
G = 65×1
1 0 3 3 3 0 0 0 3 3

カテゴリ

製品

質問済み:

2022 年 11 月 11 日

移動済み:

2022 年 11 月 21 日

Community Treasure Hunt

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

Start Hunting!

Translated by