Hauptinhalt

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 Arrays

  • strings für String Arrays

  • cell für Zellen-Arrays

  • table 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');

Siehe auch

Themen