Symptom
Beim Zuweisen großer Arrays in NumPy unter Ubuntu 18, Bei Benutzern kann der Fehler „MemoryError: Array mit Form konnte nicht zugewiesen werden“ auftreten. Dies geschieht trotz ausreichendem Systemspeicher. Insbesondere tritt unter macOS kein solches Problem auf.
Ursache
Das Problem ist auf den Overcommit-Verarbeitungsmodus des Systems zurückzuführen. Im Standardmodus (0) lehnt der Kernel möglicherweise Zuordnungsanfragen ab, die als zu groß für den physischen Speicher gelten.
Lösung
So beheben Sie den Fehler:
Überprüfen Sie den Overcommit-Modus:
$ cat /proc/sys/vm/overcommit_memory
Wenn 0 zurückgegeben wird, fahren Sie mit Schritt fort 2.
Aktivieren Sie den Modus „Immer überschreiben“ als Root:
$ echo 1 > /proc/sys/vm/overcommit_memory
Beispiel
Für eine Reihe von Dimensionen (156816, 36, 53806), mit einem uint8-Datentyp:
import numpy as np # Allocate array with "always overcommit" mode enabled a = np.zeros((156816, 36, 53806), dtype='uint8') print(a.nbytes) # 303755101056 bytes
Das System reserviert nur dann Speicher, wenn in bestimmte Array-Elemente geschrieben wird. Dies ermöglicht die Verwendung von spärlichen Arrays.
Das obige ist der detaillierte Inhalt vonWarum kann NumPy unter Ubuntu keine großen Arrays zuweisen und wie kann ich das Problem beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!