Betrachten Sie die folgende Funktion:
%Vor%Wenn ich es ausführe, bekomme ich Folgendes:
%Vor% Warum wird so viel Speicher zugewiesen und so viel Zeit für die Speicherbereinigung aufgewendet? Der Code sollte type stable sein, und ich würde erwarten, dass der Operator +=
keine Neuzuordnung durchführt. Es scheint jedoch, dass es jedes Mal, wenn es zwei Matrizen hinzufügt, neu zugewiesen wird.
Sollte ich das als Fehler in Julia betrachten? Und noch wichtiger: Wie kann ich diesen Code so schreiben, dass er nicht neu zugeordnet wird?
BEARBEITEN: fixierter Tippfehler.
@ cd98 hat meine Three-Nested-Loop-Lösung angefordert, die das Zuweisungsproblem löst, aber ich nehme an, dass sie eine äquivalente vektorisierte Version unterschreiten würde. Hier ist es:
%Vor%Und die Ausgabe:
%Vor% Es gibt auch die Möglichkeit, Base.Cartesian zu verwenden: nach using Base.Cartesian
können Sie schreibe
was sich zu den gleichen Schleifen ausdehnt wie in Jims Antwort.
Tags und Links profiling garbage-collection memory-management julia-lang