Vorabzuordnung
for
- und while
-Schleifen, die die Größe einer Datenstruktur bei jedem Schleifendurchlauf inkrementell erhöhen, können die Leistung und den Speicherverbrauch beeinträchtigen. Bei der wiederholten Änderung der Array-Größe muss MATLAB® oft zusätzliche Zeit aufwenden, um nach größeren zusammenhängenden Speicherblöcken zu suchen und das Array dann in diese Blöcke zu verschieben. Häufig können Sie die Ausführungszeit des Codes verbessern, indem Sie den maximal benötigten Speicherplatz für das Array vorab zuweisen.
Der folgende Code zeigt die Zeit an, die benötigt wird, um eine skalare Variable x
zu erstellen, und dann die Größe von x
mit einer for
-Schleife allmählich zu erhöhen.
tic x = 0; for k = 2:1000000 x(k) = x(k-1) + 5; end toc
Elapsed time is 0.301528 seconds.
Wenn Sie einen 1×1.000.000 großen Speicherblock für x
vorbelegen und auf Null initialisieren, läuft der Code viel schneller, da Sie nicht immer wieder Speicher für die wachsende Datenstruktur neu zuweisen müssen.
tic x = zeros(1,1000000); for k = 2:1000000 x(k) = x(k-1) + 5; end toc
Elapsed time is 0.011938 seconds.
Verwenden Sie die entsprechende Vorbelegungsfunktion für die Art von Array, die Sie initialisieren möchten:
zeros
für numerische Arraysstrings
für String Arrayscell
für Zellen-Arraystable
für Tabellen-Arrays
Vorbelegen einer Nicht-Doppelmatrix
Wenn Sie einen Speicherblock für eine Matrix vorbelegen, die nicht vom Typ double
ist, vermeiden Sie die Methode
A = int8(zeros(100));
Diese Anweisung belegt eine 100×100-Matrix von int8
vor, indem zunächst eine vollständige Matrix von double
-Werten erstellt und dann jedes Elements in int8
konvertiert wird. Das Erstellen des Arrays in Form von int8
-Werten spart Zeit und Speicherplatz. Beispiel:
A = zeros(100,'int8');