Läuft MATLAB langsam auf Ihrem Computer oder die Programme, die Sie in MATLAB geschrieben haben?
MATLAB nutzt die dynamische Speicherzuweisung und Neuzuweisung intensiv. Die Größenänderung von MAtrix oder Arrays kann sehr langsam und nicht deterministisch sein. Wenn eine Matrix oder ein Array wächst, wird neuer Speicher zugewiesen und die vorhandenen Daten in den neuen Speicher kopiert, bevor die alte Kopie gelöscht wird. Sie können diese Speicherüberlastung vermeiden, indem Sie solche Arrays vorbelegen: Zum Beispiel diesen Code:
x = 0; for k = 2:1000 x(k) = x(k-1) + 5; end
bewirkt x
, dass die Größe bei jeder Iteration geändert wird und sehr langsam ausgeführt wird. Zum Vergleich der folgende Code:
x = zeros(1, 1000); for k = 2:1000 x(k) = x(k-1) + 5; end
Ordnet das Array vorab so zu, dass keine Größenanpassung auftritt und erheblich schneller ausgeführt wird.
Die MathWorks-Website enthält eine ganze Seite, in der diese und andere Techniken zur Leistungsverbesserung beschrieben werden. Die Seite umfasst Folgendes:
- Vorbelegung von Arrays
- Verwenden Sie verteilte Arrays für große Datensätze
- Wenn möglich, ersetzen Sie mit durch (parallel für)
- Begrenzung der Größe und Komplexität
- Zuordnung zu Variablen
- Verwendung geeigneter logischer Operatoren
- Überladen von integrierten Funktionen
- Funktionen sind im Allgemeinen schneller als Skripte
- Laden und Speichern sind schneller als Datei-E / A-Funktionen
- Schleifen vektorisieren
- Vermeiden Sie große Hintergrundprozesse
Beachten Sie, dass die von Ihnen vorgeschlagene Lösung die letzte in der Liste von MathWorks ist. Sie sollten sich zuerst alle anderen Punkte ansehen, es sei denn, Sie tun etwas, das offensichtlich ressourcenhungrig ist, z Der Blick auf andere laufende Prozesse schwitzt wahrscheinlich das kleine Zeug.