Макс в групи в Matlab

Имам следната матрица:

[ 2 5 7 8  1 3 4 6  5 7 3 1;
  1 1 1 1  2 2 2 2  3 3 3 3;]

Първият ред представлява стойности, а вторият характеристика

Искам да получа максималната стойност, ако стойността във втория ред е същата, т.е. тяхната характеристика е една и съща. И така, това, което бих искал да имам е:

[ 8 6 7], тъй като 8 е най-високата стойност, когато вторият ред е 1, 6, когато вторият ред е е 2, и 7, когато вторият ред е 3. Мога да го направя с цикъл, но бих искал векторизирано решение и, ако е възможно, разбира се, в един ред.


person user4403586    schedule 29.12.2014    source източник


Отговори (1)


accumarray прави точно това, което искате

x=[ 2 5 7 8 1 3 4 6 5 7 3 1; 1 1 1 1 2 2 2 2 3 3 3 3;]
accumarray(x(2,:)',x(1,:)',[],@max)
person Daniel    schedule 29.12.2014
comment
@ Daniel Благодаря, не знаех за това! - person user4403586; 30.12.2014
comment
accumarray! хубаво. +1 - person rayryeng; 30.12.2014