【发布时间】:2015-04-12 08:38:36
【问题描述】:
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)).'
如果accumarray 稳定,则预期输出为11:20。实际上输出是:
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
【问题讨论】:
标签: matlab accumarray stable-sort