adding to a matrix with

1 visualización (últimos 30 días)
ily
ily el 26 de Ag. de 2011
I want to add one to the matrix A for each time the respective linear index appears in the vector Ex. lin_ind =
1 1 3 5 5 7 9 9 11 13 13
A = zeros(8, 8)
I want A(1) = 2 because 1 appears twice. A(2) = 0. A(3) = 1.
  2 comentarios
Chaowei Chen
Chaowei Chen el 27 de Ag. de 2011
just comment on "I want A(1) = 2 because 1 appears twice. A(2) = 0. A(3) = 1. "
This is histogram. A=hist(lin_ind,1:64);A=reshape(A,[8 8]);
Walter Roberson
Walter Roberson el 27 de Ag. de 2011
Good point about it being a histogram.
I did some timing, and on my system,
A=reshape(accumarray(lin_ind(:),1,[64 1]),[8,8]);
is about twice as fast as
A=reshape(hist(lin_ind,1:64),[8,8]);
when tried with the lin_ind given above. I did not try with a larger lin_ind

Iniciar sesión para comentar.

Respuesta aceptada

Walter Roberson
Walter Roberson el 27 de Ag. de 2011
You create an 8 x 8 array, and then you specify the additions in terms of 1-dimension indices, and from your question you clearly want gaps of 0 where there is no linear index with the corresponding value. The maximum value of your example lin_id is 13: does that mean you would want A(13) = 2 ? If so, then should that A(13) correspond to A(2,5), the 13th element of your 8 x 8 array? If so, then:
A = zeros(8,8);
t = accumarray(lin_ind(:),1);
A(1:length(t)) = A(1:length(t)) + t;
  2 comentarios
Andrei Bobrov
Andrei Bobrov el 27 de Ag. de 2011
Hi Walter!
variant
[I,J] = ind2sub([8 8],lin_ind)
A = accumarray([I',J'] ,1,[8 8])
ily
ily el 28 de Ag. de 2011
Thanks, both are great solutions. I actually have the positions specified in row and column subscripts and I converted it to linear indices, so andrei's solution allows me to skip that step. I didn't know of the accumarray function before.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Matrices and Arrays 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