How do I average rows which contain the same first to elements?
Mostrar comentarios más antiguos
I'm stuck on this problem for a while. I want to obtain a matrix which is averaged for the rows which contain the same first two elements. I don't want to clear the rows which are not equal for the first two elements. When I have a matrix A:
A=[1 1 1 1 1
1 2 3 4 5
1 2 4 4 4
1 2 3 3 3
2 2 2 2 2
2 2 3 3 3]
I want the outcome to be:
A=[1 1 1 1 1
1 2 3.33 3.67 4
2 2 2.5 2.5 2.5]
I hope someone could help me on this.
Respuesta aceptada
Más respuestas (1)
Andrei Bobrov
el 10 de Jun. de 2013
Editada: Andrei Bobrov
el 10 de Jun. de 2013
[~,~,c] = unique(A(:,1:2),'rows');
out = accumarray([repmat(c,size(A,2),1) kron((1:size(A,2))',...
ones(size(A,1),1))],A(:),[],@mean);
or
[c c c] = unique(A(:,1:2),'rows');
[ii,jj] = ndgrid(c,1:size(A,2));
out = accumarray([ii(:) jj(:)],A(:),[],@mean);
Categorías
Más información sobre Creating and Concatenating Matrices en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!