Accumarray estável em MATLAB

Função interna do MATLABaccumarray aceita uma funçãofun como um quarto argumento.

A = accumarray(subs,val,sz,fun);

Isto se aplicafun para cada subconjunto de elementos emval que têm subscritos idênticos emsubs. A documentação no entanto afirma:

Se os subscritos emsubs não são classificados em relação aos seus índices lineares,fun não deve depender da ordem dos valores em seus dados de entrada.

Como podemos implementar umaestável versão deaccumarray, que não tem essa limitação, mas garantirá que os subconjuntos adotem a mesma ordem dada porval?

Exemplo:

subs = [1:10,1:10];
val = 1:20;
accumarray(subs(:), val(:), [], @(x)x(end)).'

O resultado esperado disso seria11:20 E seaccumarray eram estáveis. De fato, a saída é:

ans =
    11    12    13    14     5     6     7    18    19    20

Nossa implementação deve render:

accumarrayStable(subs(:), val(:), [], @(x)x(end)).'`
ans =
    11    12    13    14    15    16    17    18    19    20

questionAnswers(1)

yourAnswerToTheQuestion