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