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

6 visualizaciones (últimos 30 días)
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.

Respuesta aceptada

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

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Matrix Indexing en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by