2016-08-25 1 views
1

Ich lese eine CSV-Datei in Python und erstellen Sie eine 4664605 x 4-Array. Ich möchte eine Matrix. Also benutze ich die Funktion numpy.pad (wit constant value = 0) um eine 4664605 x 4664605 Matrix zu erstellen. Aber ich habe folgende Fehler messaage:Speicherfehler in Python mit numpy.pad Funktion

Traceback (jüngste Aufforderung zuletzt): Datei "C: \ Benutzer \ Angelika \ Eclipse-\ Projects \ vonNeumann \ vonNeumann.py", Zeile 7, in A_New = np.pad (A, ((0,0), (0,4664601)), 'Konstante', Konstante_Werte = (0)) Datei "C: \ Anaconda \ lib \ Site-Pakete \ numpy \ lib \ arraypad .py ", Zeile 1394, in Pad newmat = _append_const (newmat, pad_after, after_val, Achse) Datei" C: \ Anaconda \ lib \ Site-Pakete \ numpy \ lib \ arraypad.py ", Zeile 138, in _append_const zurückgeben np.concatenate ((arr, np.zeros (padshape, dtype = arr.dtype)), MemoryError

Ich habe die maximale Größe meines Systems im Falle eines Überlaufs überprüft, aber es ist in Ordnung. Genauer gesagt, sys.maxsize = 9223372036854775807 und Matrixgröße = 21758539806025. Das Problem ist, dass beim Anhängen von Zeilen alles in Ordnung ist. Das heißt, das Ergebnis ist ein 9329210 × 4 Array. Aber ich kann keine 4664601 Spalten hinzufügen, um eine Matrix zu haben. Ich weiß nicht, was ich tun soll.

Vielen Dank, Angelika

+0

Bitte geben Sie Ihren Code ein. – Will

+0

Das ist irgendwo in der Nähe von 87 Terabyte Speicher, die Sie brauchen, um dieses absurde Array zu konstruieren, unter der Annahme eines 4-Byte-Dtypes. Sind Sie sicher, dass Sie verstehen, was Sie tun? – user2357112

+0

Nein, ich hatte es nicht verstanden. Vielen Dank für Ihren wertvollen Kommentar. Jetzt erkenne ich auch hpauljs Antwort. Wirklich dankbar! – Angelika

Antwort

1

Dies ist eher eine Frage als eine Antwort. Aber es ist zu lang für Kommentarzeilen. Die Unterscheidung zwischen einer 4664605 x 4 array und 4664605 x 4664605 matrix macht keinen Sinn. Rechtwinkligkeit definiert kein matrix, zumindest nicht in den meisten Kontexten.

Was ist der Zweck des Hinzufügens von vielen 0 gefüllten Spalten zu diesem Array? Selbst wenn Sie Speicher hätten, um einen so großen zu erstellen, hätten Sie genügend Speicher für mehrere Kopien (wie für Mathematik und viele andere Operationen benötigt)?

Die Fehlerzeile:

np.concatenate return ((arr, np.zeros (padshape, dtype = arr.dtype))

arr müssen (4664605,4) in Form und padshape(4664605, 466401). So ist es versuchen, ist eine zeros Array von padshape Größe machen, und dann ein neues Array der Endgröße machen. So einfach die Konstruktion dieser Platz für 2 sehr größere Arrays erfordert.

Sie könnten ein wenig Platz sparen, indem Sie die pad direkt

res = np.zeros((4664605, 4664605), dtype=arg.dtype) 
res[:,:4] = arr 

Aber immer noch - warum so ein großes Array, das meistens Null ist?