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