How to reduce this matrix?
Suppose that M=[1 0.1 1.1; 1 0.1 1.1; 3 0.1 1.2; 2 0.2 3; 1 2 4; 2 2 4; 2 3 5];
based on the second column, for repeated values of the second column, sum the elements of column 1 when the elements of column 3 are equals. If the elements of column 3 are different, do a weighted average using column 1.
For the matrix M above, the output should be:
M_out = [5 0.1 1.16; 2 0.2 3; 3 2 4; 2 3 5];

 Respuesta aceptada

Azzi Abdelmalek
Azzi Abdelmalek el 21 de Abr. de 2016

0 votos

M=[1 0.1 1.1; 1 0.1 1.1; 3 0.1 1.2; 2 0.2 3; 1 2 4; 2 2 4; 2 3 5]
[ii,jj,kk]=unique(M(:,2))
a=accumarray(kk,M(:,1))
b=accumarray(kk,1:numel(kk),[],@(x) sum(M(x,1).*M(x,3))/sum(M(x,1)));
M_out =[a ii b]

Más respuestas (0)

Categorías

Más información sobre Creating and Concatenating Matrices en Centro de ayuda y File Exchange.

Preguntada:

el 21 de Abr. de 2016

Respondida:

el 21 de Abr. de 2016

Community Treasure Hunt

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

Start Hunting!

Translated by