vector discretization to sum of values in each bin

7 views (last 30 days)
לק"י
Hi guys, I'm looking a way to discretize vector values to bins. I want to have bins that contain the sum of values of incidents each of them contain.
example:
lets take the matlab's discretize example:
data = [1 1 2 3 6 5 8 10 4 4]
edges = 2:2:10
so, edges is:
edges = 1×5
2 4 6 8 10
Y = discretize(data,edges)
so, Y is:
Y = 1×10
NaN NaN 1 1 3 2 4 4 2 2
what I want to get is a vector that sums all the values of incidents that fall into each bin. for this example:
desiredvector=[5, 13, 6, 18]
as you can see, I have 4 bins (as specified by edges), and in each bin i got the sum of values of the incidents that fall into it.
I hope I explained it well.. thanks any way!
Amit.

Accepted Answer

Matt J
Matt J on 4 Oct 2021
Edited: Matt J on 4 Oct 2021
data = [1 1 2 3 6 5 8 10 4 4];
edges = 2:2:10;
Y = discretize(data,edges);
valid=isfinite(Y);
result=accumarray(findgroups(Y(valid)).' , data(valid).').'
result = 1×4
5 13 6 18
or
result=splitapply(@sum , data(valid) , findgroups(Y(valid)) )
result = 1×4
5 13 6 18
  2 Comments
Matt J
Matt J on 4 Oct 2021
You're welcome, but please Accept-click the answer to certify that it resolved your question.

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!