groupcounts and sum of data in another array in the same order

5 views (last 30 days)
I have a random signal sample and I have done cycle counting to extract the data that most influence calculation. The result of this cycle counting are 2 arrays, array A which consist of its range (2 x amplitude) and array B which consist of its occurrence (half cycle or full cycle). I want to do groupcounts that count the occurrence of ranges from array A and count the sum of its cycle from the result of the groupcounts.
Example:
A = [10, 11, 12, 10, 11, 12, 13, 11, 15, 10], B = [0.5, 1, 1, 0.5, 0.5, 0.5, 1, 1, 1, 0.5]
The goupcounts on array A will tell me how much do 10, 11, 12, 13, and 15 occured in array A. I want to count the sum of the cycle of each of this ranges (10, 11, 12, 13, and 15). How do I do that?
  1 Comment
Dyuman Joshi
Dyuman Joshi on 13 Dec 2023
Edited: Dyuman Joshi on 13 Dec 2023
Do you mean like this?
A = [10, 11, 12, 10, 11, 12, 13, 11, 15, 10];
B = [0.5, 1, 1, 0.5, 0.5, 0.5, 1, 1, 1, 0.5]
B = 1×10
0.5000 1.0000 1.0000 0.5000 0.5000 0.5000 1.0000 1.0000 1.0000 0.5000
[I, K] = findgroups(A)
I = 1×10
1 2 3 1 2 3 4 2 5 1
K = 1×5
10 11 12 13 15
S1 = accumarray(I.', A.')
S1 = 5×1
30 33 24 13 15
S2 = accumarray(I.', B.')
S2 = 5×1
1.5000 2.5000 1.5000 1.0000 1.0000
Edit - Well, it seems I'm late to the party haha.

Sign in to comment.

Accepted Answer

Voss
Voss on 13 Dec 2023
A = [10, 11, 12, 10, 11, 12, 13, 11, 15, 10], B = [0.5, 1, 1, 0.5, 0.5, 0.5, 1, 1, 1, 0.5]
A = 1×10
10 11 12 10 11 12 13 11 15 10
B = 1×10
0.5000 1.0000 1.0000 0.5000 0.5000 0.5000 1.0000 1.0000 1.0000 0.5000
[counts,vals] = groupcounts(A(:))
counts = 5×1
3 3 2 1 1
vals = 5×1
10 11 12 13 15
sums = groupsummary(B(:),A(:),'sum')
sums = 5×1
1.5000 2.5000 1.5000 1.0000 1.0000

More Answers (2)

Matt J
Matt J on 13 Dec 2023
splitapply(@sum,B,findgroups(A))

Matt J
Matt J on 13 Dec 2023
accumarray(findgroups(A(:)), B(:))

Community Treasure Hunt

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

Start Hunting!