Встроенная функция MATLAB accumarray
принимает функцию fun
в качестве четвертого аргумента.
A = accumarray(subs,val,sz,fun);
Это применяется fun
к каждому подмножеству элементов в val
, которые имеют идентичные индексы в subs
. Однако в документации говорится:
Если индексы в
subs
не отсортированы относительно их линейных индексов,fun
не должен зависеть от порядка значений во входных данных.
Как мы можем реализовать стабильную версию accumarray
, которая не имеет этого ограничения, но гарантирует, что подмножества будут принимать тот же порядок, что и val
?
Пример:
subs = [1:10,1:10];
val = 1:20;
accumarray(subs(:), val(:), [], @(x)x(end)).'
Ожидаемый результат будет 11:20
, если accumarray
будет стабильным. Фактически результат:
ans =
11 12 13 14 5 6 7 18 19 20
Наша реализация должна дать:
accumarrayStable(subs(:), val(:), [], @(x)x(end)).'`
ans =
11 12 13 14 15 16 17 18 19 20