MATLAB の組み込み関数は、関数を 4 番目の引数として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