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??

5 vues (au cours des 30 derniers jours)
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.

Réponse acceptée

Greg Dionne
Greg Dionne le 14 Avr 2015
Modifié(e) : Greg Dionne le 14 Avr 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 commentaires
Roger Stafford
Roger Stafford le 15 Avr 2015
Assuming A and B are still row vectors, try this:
t = A>0;
C = accumarray(A(t)',B(t)')';
Kirtiman
Kirtiman le 15 Avr 2015
Modifié(e) : Kirtiman le 15 Avr 2015
Thanks Greg and Roger. I removed elements containing zeros and then used method suggested by Greg.

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Matrix Indexing dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by