Heim >Backend-Entwicklung >Python-Tutorial >Warum kann NumPy unter Ubuntu keine großen Arrays zuweisen und wie kann ich das Problem beheben?

Warum kann NumPy unter Ubuntu keine großen Arrays zuweisen und wie kann ich das Problem beheben?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-30 14:40:11133Durchsuche

Why Does NumPy Fail to Allocate Large Arrays on Ubuntu, and How Can I Fix It?

Array kann nicht mit Form und Datentyp zugewiesen werden

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:

  1. Überprüfen Sie den Overcommit-Modus:

    $ cat /proc/sys/vm/overcommit_memory

    Wenn 0 zurückgegeben wird, fahren Sie mit Schritt fort 2.

  2. Aktivieren Sie den Modus „Immer überschreiben“ als Root:

    $ echo 1 > /proc/sys/vm/overcommit_memory
  3. Versuchen Sie die Array-Zuweisung erneut.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn