Макс внутри групп в 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
@ Даниил Спасибо, я не знал об этом! - person user4403586; 30.12.2014
comment
accumarray! Ницца. +1 - person rayryeng; 30.12.2014