How can I take the values of one array, map the values as indices to another array, then generate a thrid array with the sum of former's elements??

7 views (last 30 days)
I know the question is a bit confusing, so let me illustrate what i am trying to do with an example:
A = [ 2 1 4 2 3 2 4 0 ]
B = [ 1 1.5 2 1.5 2.5 3 1 ]
Now what I need is C = [ 1.5 5.5 2.5 3 ] Here is an explanation:
A[2] = 1 , so B[2] = C[1]
A[1], A[4], A[6] = 2, so B[1]+B[4]+B[6]= C[2]
A[5] = 3 so B[5] = C[3]
A[3], A[7] = 4 so B[3]+B[5] = C[4]
The index elements from A with common values (or a particular value) are mapped to B(same indices), then the elements with those indices in B are added (if one value, directly become elements in C) to get array C such that the values of A are indices of C.
Edited: A[8] = 0, so neglect that value.

Accepted Answer

Greg Dionne
Greg Dionne on 14 Apr 2015
Edited: Greg Dionne on 14 Apr 2015
You can use ACCUMARRAY. ACCUMARRAY is designed to take column vectors, not row vectors. So use this:
accumarray(A(:),B(:),[max(A) 1])'
Hope this helps!
-Greg
  10 Comments
Kirtiman
Kirtiman on 15 Apr 2015
Edited: Kirtiman on 15 Apr 2015
Thanks Greg and Roger. I removed elements containing zeros and then used method suggested by Greg.

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!