Accumarray estable en MATLAB
Función incorporada de MATLABaccumarray
acepta una funciónfun
como cuarto argumento.
A = accumarray(subs,val,sz,fun);
Esto aplicafun
a cada subconjunto de elementos enval
que tienen subíndices idénticos ensubs
. Sin embargo, la documentación establece:
Si los subíndices ensubs
no están ordenados con respecto a sus índices lineales,fun
no debe depender del orden de los valores en sus datos de entrada.
¿Cómo podemos implementar unestable versión deaccumarray
, que no tiene esta limitación, pero garantizará que los subconjuntos adopten el mismo orden dado porval
?
Ejemplo:
subs = [1:10,1:10];
val = 1:20;
accumarray(subs(:), val(:), [], @(x)x(end)).'
El resultado esperado de esto sería11:20
Siaccumarray
fueron estables De hecho, la salida es:
ans =
11 12 13 14 5 6 7 18 19 20
Nuestra implementación debe producir:
accumarrayStable(subs(:), val(:), [], @(x)x(end)).'`
ans =
11 12 13 14 15 16 17 18 19 20