Warum ist dieses numpy Array zu groß, um zu laden?

Ich habe eine 3.374Gb npz Datei, myfile.npz .

Ich kann es lesen und die Dateinamen ansehen:

 a = np.load('myfile.npz') a.files 

Gibt

 ['arr_1','arr_0'] 

Ich kann in 'arr_1' ok lesen

 a1=a['arr_1'] 

Allerdings kann ich nicht in arr_0 laden oder seine Form lesen:

 a1=a['arr_0'] a['arr_0'].shape 

Beide oben Operationen geben folgende Fehlermeldung:

 ValueError: array is too big 

Ich habe 16 GB RAM, von denen 8.370Gb zur Verfügung steht. Also das Problem scheint nicht im Zusammenhang mit dem Gedächtnis. Meine Fragen sind:

  1. Soll ich diese Datei lesen können?

  2. Kann jemand diesen Fehler erklären?

  3. Ich habe mich mit np.memmap , um das zu np.memmap – ist das ein vernünftiger Ansatz?

  4. Welche Debugging-Ansatz sollte ich verwenden?

BEARBEITEN:

Ich habe Zugang zu einem Computer mit mehr RAM (48GB) und es geladen. Der dtype war in Wirklichkeit complex128 und das unkomprimierte Gedächtnis a['arr_0'] war 5750784000 Bytes. Es scheint, dass ein RAM Overhead erforderlich sein kann. Entweder das oder meine vorhergesagte Menge an verfügbarem RAM war falsch (ich habe Windows Sysinternals RAMmap).

One Solution collect form web for “Warum ist dieses numpy Array zu groß, um zu laden?”

Ein np.complex128 Array mit den Dimensionen (200, 1440, 3, 13, 32) sollte etwa 5,35 GiB unkomprimiert aufnehmen, also wenn du wirklich 8,3 GB kostenloses, adressierbares Gedächtnis hast, dann musst du grundsätzlich in der Lage sein zu laden Das Array

Allerdings, basierend auf Ihren Antworten in den Kommentaren unten, verwenden Sie 32-Bit-Versionen von Python und numpy. In Windows kann ein 32-Bit-Prozess nur bis zu 2 GB Speicher (oder 4 GB) adressieren, wenn die Binärdatei mit dem IMAGE_FILE_LARGE_ADDRESS_AWARE Flag kompiliert wurde, die meisten 32-Bit-Python-Distributionen sind nicht). Folglich ist Ihr Python-Prozess auf 2 GB Adressraum beschränkt, unabhängig davon, wie viel physikalischer Speicher Sie haben.

Sie können entweder installieren 64-Bit-Versionen von Python, numpy, und alle anderen Python-Bibliotheken, die Sie benötigen, oder leben mit dem 2GB-Limit und versuchen, um sie herum zu arbeiten. Im letzteren Fall kannst du mit der Speicherung von Arrays, die die 2GB-Grenze vor allem auf der Festplatte übersteigen (z. B. mit np.memmap ), aber ich würde Ihnen raten, für die Option # 1 zu gehen, da Operationen auf Memmaped Arrays sind viel langsamer in Die meisten Fälle als für normale np.array s, die ganz im RAM wohnen.


Wenn du bereits einen anderen Rechner hast, der genügend RAM hat, um das ganze Array in den Core Memory zu laden, dann würde ich vorschlagen, dass du das Array in einem anderen Format speicherst (entweder als plain np.memmap binary oder vielleicht besser in einer HDF5-Datei mit PyTables Oder H5py ). Es ist auch möglich (wenn auch etwas schwieriger), das Problem-Array aus der .npz Datei zu extrahieren, ohne es in den RAM zu laden, damit du es dann als np.memmap Array auf der Festplatte np.memmap :

 import numpy as np # some random sparse (compressible) data x = np.random.RandomState(0).binomial(1, 0.25, (1000, 1000)) # save it as a compressed .npz file np.savez_compressed('x_compressed.npz', x=x) # now load it as a numpy.lib.npyio.NpzFile object obj = np.load('x_compressed.npz') # contains a list of the stored arrays in the format '<name>.npy' namelist = obj.zip.namelist() # extract 'x.npy' into the current directory obj.zip.extract(namelist[0]) # now we can open the array as a memmap x_memmap = np.load(namelist[0], mmap_mode='r+') # check that x and x_memmap are identical assert np.all(x == x_memmap[:]) 
  • Numpy __array_prepare__ Fehler
  • Python: Schreiben Sie eine WAV-Datei in das numpy Float Array
  • Vergleichen Sie `float` und` float64` in python
  • Binning Daten in Python mit scipy / numpy
  • Numpy install: Visual C ++ 9 nicht gefunden
  • Effiziente Numpy 2D-Array-Konstruktion aus 1D-Array
  • Füllen Sie die Matrix mit transponierter Version
  • Numpy: Für jedes Element in einem Array finden Sie den Index in einem anderen Array
  • Numpy 2d array max / argmax
  • Wie macht man X-Achse in Matplotlib / Pylab, um NICHT automatisch die Werte zu sortieren?
  • Mehrfache lineare Regression mit Python
  • Python ist die beste Programmiersprache der Welt.