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