14 Stimmen

MATLAB: wie man eine Funktion elementweise anwendet

Sagen wir, ich habe eine Funktion calculateStuff(x), die einen Skalar als Parameter akzeptiert und einen Skalar zurückgibt.

Sagen wir, ich habe einen Vektor X und ich möchte calculateStuff auf jedes Komponente in X anwenden und einen Vektor der Ergebnisse erhalten und in einem neuen Vektor Y speichern.

Offensichtlich ist Y=calculateStuff(X) nicht korrekt. Gibt es einen anderen Weg, dies zu tun, ohne eine Schleife zu verwenden?

16voto

Jonas Punkte 74252

Sie haben drei Optionen:

  1. ändern Sie calculateStuff so, dass es Arrays akzeptieren und Arrays zurückgeben kann
  2. schreiben Sie eine Schleife
  3. benutzen Sie arrayfun, um die Schleife zu verstecken: Y = arrayfun(@calculateStuff,X)

9voto

Peter K. Punkte 7908

Die meisten Matlab-Operationen werden es Ihnen ermöglichen, eine Matrix einzugeben und eine Matrix zurückzugeben. Sie sollten in der Lage sein, calculateStuff() umzuschreiben, um eine Matrix entgegenzunehmen und eine Matrix zurückzugeben. Das ist in der Regel VIEL schneller als die Verwendung einer for-Schleife. Schleifen in Matlab sind zeitlich sehr aufwendig.

Die Arten von Dingen, auf die Sie achten müssen, sind "Punkt"-Versionen normaler Operationen. Beispielsweise anstelle von

y = z * x;

machen Sie

y = z .* x;

Das erste wird eine Matrixmultiplikation durchführen, was wahrscheinlich nicht das ist, was Sie wollen, wenn Sie Code vektorisieren. Das zweite führt eine elementweise Multiplikation von z und x durch.

Siehe hier und suchen Sie nach "The dot operations".

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X