Warum benötigt numpy.zeros wenig Platz?

9

Ich frage mich, warum numpy.zeros so wenig Platz einnimmt?

%Vor%

Dies nimmt keine Erinnerung während,

%Vor%

dauert etwa 1,5 GB. Erstellt numpy.zeros ein Array von leeren Zeigern? Wenn ja, gibt es eine Möglichkeit, den Zeiger im Array zurückzusetzen, nachdem er in Cython geändert wurde? Wenn ich verwende:

%Vor%

Die Speichernutzung geht weit nach oben. Gibt es eine Möglichkeit, einen Wert zu ändern und dann wieder in das Format numpy.zeros zu ändern, das ursprünglich in Python oder Cython enthalten war?

    
user3266890 19.12.2014, 22:39
quelle

1 Antwort

16

Verwenden Sie Linux? Linux hat eine faule Speicherzuweisung. Die zugrunde liegenden Aufrufe von malloc und calloc in numpy sind immer 'erfolgreich'. Bis zum ersten Zugriff auf den Speicher wird tatsächlich kein Speicher zugewiesen.

Die Funktion zeros verwendet calloc , das allen zugewiesenen Speicher vor dem ersten Zugriff auf Null setzt. Daher muss numpy das Array nicht explizit auf Null setzen und das Array wird daher initialisiert. Die Funktion repeat kann sich jedoch nicht auf calloc verlassen, um das Array zu initialisieren. Stattdessen muss malloc verwendet werden und dann die Wiederholungen in alle Elemente im Array kopiert werden (wodurch die sofortige Zuweisung erzwungen wird).

    
Dunes 20.12.2014, 17:28
quelle

Tags und Links