Stabiles Akkumarray in MATLAB

MATLABs eingebaute Funktionaccumarray akzeptiert eine Funktionfun als viertes Argument.

A = accumarray(subs,val,sz,fun);

Dies giltfun zu jeder Untergruppe von Elementen inval, die identische Indizes in @ habsubs. In der Dokumentation heißt es jedoch:

Wenn die Indizes insubs sind nicht nach ihren linearen Indizes sortiert,fun sollte nicht von der Reihenfolge der Werte in den Eingabedaten abhängen.

Wie können wir ein @ implementierstabi Version vonaccumarray, das diese Einschränkung nicht hat, aber garantiert, dass die Teilmengen dieselbe Reihenfolge wie von @ annehmeval?

Beispiel

subs = [1:10,1:10];
val = 1:20;
accumarray(subs(:), val(:), [], @(x)x(end)).'

Die erwartete Ausgabe davon wäre11:20 wennaccumarray waren stabil. In der Tat ist die Ausgabe:

ans =
    11    12    13    14     5     6     7    18    19    20

Unsere Implementierung sollte ergeben:

accumarrayStable(subs(:), val(:), [], @(x)x(end)).'`
ans =
    11    12    13    14    15    16    17    18    19    20

Antworten auf die Frage(2)

Ihre Antwort auf die Frage