Numpy: Die ndarray-Dump-Funktion (und Straight cPickle) schlägt bei großen Arrays fehl (Trac # 1803).

Erstellt am 20. Okt. 2012  ·  8Kommentare  ·  Quelle: numpy/numpy

_Ursprüngliches Ticket http://projects.scipy.org/numpy/ticket/1803 am 19.04.2011 vom Trac-Benutzer meawoppl, zugewiesen an unknown._

a = Nullen ((300000, 1000))
f = offen ("test.pkl", "w")

cPickle.dump (a, f)

SystemError Traceback (letzter Aufruf zuletzt)

/ home / kddcup / code / matt / svd-projection / take5 /im()

SystemError: Fehlerrückgabe ohne Ausnahme gesetzt

Oder mit der .dump-Funktion:

a.dump ("test.pkl")

SystemError Traceback (letzter Aufruf zuletzt)

/ home / kddcup / code / matt / svd-projection / take5 /im()

SystemError: NULL-Ergebnis ohne Fehler in PyObject_Call

Ich bin mir nicht sicher, ob dies ein Numpy- oder Pickle / cPickle-Fehler ist. In beiden Fällen würde eine aufschlussreichere Fehlermeldung sicherlich helfen. Ich denke, das Problem tritt nur bei Arrays auf, die größer als 2 ** (32-1) Bytes sind, aber ich müsste mehr experimentieren, um sicherzugehen.

00 - Bug Other

Alle 8 Kommentare

Ich stehe auch vor diesem Problem.

@zhlsk hat nicht weiter versucht oder untersucht, ob es einen Fix in Python gibt, aber ich denke, dies ist kein Numpy, sondern ein Python-Problem, da: cPickle.dump(a.tostring(), f) für mich trotzdem fehlschlägt und das ist nur ein großes Problem string dann und hat nichts mit numpy zu tun. Die Verwendung der numpy save-Funktionen sollte jedoch keine derartigen Probleme haben.

@seberg Danke für deine Antwort. Du hast recht. Es ist ein Python-Problem: http://bugs.python.org/issue11564

Im Prinzip könnten wir den Fehler wahrscheinlich trotzdem umgehen, indem wir groß übergeben
Arrays zum Pickler als eine Reihe von Objekten, von denen jedes in die passt
begrenzt und rekonstruiert das Array zur Unpickle-Zeit. Es klingt wie das
Die Größe eines einzelnen Byte-Arrays ist begrenzt.
Am 14. Dezember 2012 um 22:11 Uhr schrieb "zhlsk" [email protected] :

@seberg https://github.com/seberg Vielen Dank für Ihre Antwort. Du hast recht.
Es ist ein Python-Problem: http://bugs.python.org/issue11564

- -
Antworten Sie direkt auf diese E-Mail oder sehen Sie sie sich auf Gi tHubhttps an: //github.com/numpy/numpy/issues/2396#issuecomment -11394338.

Irgendwelche Fortschritte in diesem Bereich? Es scheint, dass numpy.save und numpy.savetxt beide von diesem Problem betroffen sind. Problemumgehungen?

Es ist ein Fehler in Python, das Update besteht darin, auf eine neuere Version zu aktualisieren (es ist in Python 3.3 behoben), und die Problemumgehung besteht darin, Ihr Array selbst in kleinere Teile zu packen oder ein anderes Dateiformat als Python-Pickles zu verwenden.

np.savetxt ist davon nicht betroffen, und np.save ist nur für Objektarrays betroffen.

Schließen.

Ich erhalte dies, wenn ich versuche, eine spärliche Matrix mit 11.314 x 8.463.980.778 mit 352.451.719 gespeicherten Elementen im Format scipy.sparse.csr_matrix zu cPickeln. Python-Version: Python 2.7.10 | Anaconda 2.3.0 (x86_64) | (Standard, 28. Mai 2015, 17:04:42)

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen