Inkrementieren eines Wertes eines MATLAB-array mehrmals in einer Zeile
Dies ist eine Frage, über die Inkrementierung eines Wertes von einem MATLAB-array mehrmals in der gleichen Anweisung, ohne eine for-Schleife verwenden.
Ich mein array als:
>> A = [10 20 30];
Und führen Sie dann:
>> A([1, 1]) = A([1, 1]) + [20 3]
A =
13 20 30
Deutlich die 20 ist, wird ignoriert. Aber ich möchte, dass es aufgenommen werden, so dass:
>> A = [10 20 30];
>> A([1, 1]) = A([1, 1]) + [20, 3]
geben würde:
A =
33 20 30
Gibt es eine Funktion, damit dies getan werden in einem schönen, vektorisierte Mode?
(In der Realität, die Indizierung des Arrays enthalten mehrere Indizes, so könnte es sein [1 1 2 2 1 1 1 1 3 3 3]
etc., mit einer Reihe von zahlen zu erhöhen um (die [20, 3]
oben) der gleichen Länge).
InformationsquelleAutor Bill Cheatham | 2010-10-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was Sie tun möchten, können mithilfe der Funktion ACCUMARRAY, etwa so:
Und der Ausgang dieses Beispiel sollte sein:
EDIT: Wenn
A
ist ein großes array von Werten, und es gibt nur ein paar Schritten hinzufügen, wird möglicherweise die folgenden werden rechnerisch effizienter als die oben genannten:Danke, ich habe das erste arbeitet ein Genuss. Ich glaube, es gibt eine transpose-symbol fehlt auf die SUBS, aber - ich konnte nur
A = accumarray([1:numel(A) index]',[A increment]);
Arbeit. Ich werde etwas tun, speed-Vergleiche für den zweiten Vorschlag, wenn meine Daten aufgefüllt.Du hast Recht. Ich habe vergessen, dass die erste Eingabe hat zu einem Spalten-Vektor in diesem Fall. Im Allgemeinen, den ersten Eingang hat, um eine M-by-N matrix, wobei M die Anzahl der Werte akkumuliert und N die Anzahl der Indizes (1 in diesem Fall aber mehr für mehrdimensionale Indexierung).
Seien Sie nicht überrascht. @gnovice ist der einzige Benutzer, der mit einem Goldenen Matlab-Abzeichen. Das bedeutet, dass er sowohl schnell als auch richtig.
oder gründlich süchtig nach SO. 😉
InformationsquelleAutor gnovice
Vielleicht gibt es etwas, das ich nicht ganz hier her, aber Sie sind im Grunde versucht, hinzufügen von 23 auf das erste element von A, richtig? So können Sie schreiben:
Auch, wenn Sie eine index-array kannst du so schreiben,
Charlesworth: Nicht sicher, ob Sie es jetzt tut, aber ich habe bearbeitet die Frage der rechten, während Sie schreiben den Kommentar.
Ich denke, der Allgemeine Fall hat
toAdd
die gleiche Länge wieindexArray
. Also, wenn der InhaltindexArray
einzigartig waren, würden Sie nur tunA(indexArray) + toAdd
.Charlesworth: Ah, ok. Ja, das würde Sinn machen. Ich werde aktualisieren, meine Antwort mit deinem Kommentar, wenn es klar wird, dass dies ist, was der OP wollte, sondern als das, was @gnovice schlägt.
InformationsquelleAutor Jonas