Frage

MATLAB ist ein Pass von Wert Sprache. Ich habe eine rekursive Funktion, die die Pixel Nachbarn verarbeitet. Es ist sehr teuer, die Kopie des Bildes zu machen (in meinem Fall zwei Bilder) jedes Mal, wenn die Funktion aufgerufen wird.

Ich benutzte globale Variablen, das Problem zu lösen. Gibt es eine andere Art und Weise eine rekursive Funktion ändern, ein Array zu machen?

War es hilfreich?

Lösung

Sie haben drei Möglichkeiten hier, aber vielleicht brauchen Sie nicht einer von ihnen, da Matlab verwendet ‚copy-on-write‘, das heißt Variablen nur kopiert werden, wenn Sie sie ändern.

  1. Wie @gnovice erwähnt, können Sie verwenden, um eine verschachtelte Funktion . Variablen innerhalb der verschachtelten Funktion verwendet wird zwischen der verschachtelten Funktion und der einschließenden Funktion geteilt. Verschachtelte Funktionen sind etwas schwierig zu debuggen und ein bisschen komplizierter zu schreiben / verstehen.
  2. Sie können speichern Sie Ihre Bilder als Eigenschaften eines Griff Objekt , die als Referenz übergeben wird.
  3. Sie können Code anders schreiben, um nicht eine rekursive Funktion zu verwenden, da Matlab nicht die beste Sprache ist jene für die Verwendung. Wenn Sie den Zugriff auf die Bildverarbeitung Toolbox haben, können Sie in der Lage sein, Funktionen zu verwenden, wie im2col Rewrite die Funktion.

Schließlich, wenn Sie mit Ihrem aktuellen Programm bleiben wollen, ich schlage vor, mit stark persistent Variablen anstelle von Globals.

Andere Tipps

MATLAB ist nicht immer pass-by-Wert, neuere Versionen von MATLAB Do not Pass-by-reference unter Umständen finden Sie unter in-Place-Operationen und eine allgemeinere Diskussion über MATLAB Speicherverwaltung in dieser SO Post .

Ohne Tail-Call-Optimierung es ist ineffizient Verwendung Rekursion und MATLAB nicht hat es so weit ich weiß, aber jede Rekursion in eine Schleife umgewandelt werden .

Wenn Sie machen Ihre rekursive Funktion ein verschachtelte Funktion innerhalb eine andere Funktion in dem die Bilddaten gespeichert sind, dann kann die rekursive Funktion, die Bilddaten , ohne dass es übergeben haben, um es .

Dies ist ein weit verbreitetes Missverständnis. Obwohl die sytanx von MATLAB Pässe von Wert ist, ist es tatsächlich nicht von Wert, wie in C. passiert Der Interpreter intelligent genug, um nur Kopien erstellen, wenn nötig. Sie sollten also einfach weiter nach Wert gehen und gehen und sehen, ob Sie in den Speichern Probleme ausgeführt werden.

Wie andere Plakate bemerkt haben, sollten Sie versuchen sowieso Rekursion in MATLAB zu vermeiden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top