Speicherfehler und Listenlimits?
Brauche ich, um zu produzieren große und große (sehr) Matrizen (Markov-Ketten) für wissenschaftliche Zwecke. Ich führe das Kalkül, dass ich in einer Liste der 20301 Elemente (=eine Zeile meiner matrix). Ich brauche alle Daten im Speicher gehen Sie weiter Markov-Schritt, aber ich kann speichern Sie Sie an anderer Stelle (z.B. Datei), falls nötig, auch wenn es langsam meinen Markov-chain-walk-through. Mein computer (wissenschaftliches Labor): Bi-xenon, 6 cores/12threads jeder, 12 GB Arbeitsspeicher, OS: win64
Traceback (most recent call last):
File "my_file.py", line 247, in <module>
ListTemp.append(calculus)
MemoryError
Beispiel der Infinitesimalrechnung Ergebnisse: 9.233747520008198 e-102 (ja, es ist vorbei 1/9000)
Wird der Fehler ausgelöst, wenn die Speicherung der 19766th element:
ListTemp[19766]
1.4509421012263216e-103
Wenn ich weiter
Traceback (most recent call last):
File "<pyshell#21>", line 1, in <module>
ListTemp[19767]
IndexError: list index out of range
Also diese Liste hatte einen Speicher-Fehler an der 19767 Schleife.
Fragen:
- Ist es ein memory-limit auf eine Liste?
Ist es ein "durch-Liste-limit" oder eine
"global-pro-script-limit"? - So umgehen Sie diese Grenzen?
Alle Möglichkeiten im Auge? - Wird es helfen, numpy, python64? Was
sind die Speicher-Grenzen mit Ihnen? Was
über andere Sprachen?
InformationsquelleAutor der Frage Taupi | 2011-04-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
First off, sehen, Wie Groß kann ein Python-Array Bekommen? und Numpy, problem mit langen arrays
Zweite, die einzige wirkliche Grenze kommt von dem Betrag, der Speicher Sie haben und wie Ihr system speichert die memory-Referenzen. Es gibt keine pro-Liste einschränken, so Python wird das gehen, bis es aus der Erinnerung. Zwei Möglichkeiten:
InformationsquelleAutor der Antwort G Gordon Worley III
Den
MemoryError
Ausnahme, dass Sie sehen, ist das direkte Ergebnis der Ausführung außerhalb des verfügbaren RAM. Dies kann verursacht werden, indem entweder die 2 GB pro Programm Grenze von Windows (32bit-Programme), oder Mangel an verfügbaren RAM auf Ihrem computer. (Diese link ist auf eine Vorherige Frage).Sollten Sie in der Lage sein zu verlängern die 2GB durch die Verwendung von 64-bit-Kopie von Python, vorausgesetzt, Sie verwenden eine 64-bit-Version von windows.
Den
IndexError
verursacht werden würde, weil Python trifft denMemoryError
Ausnahme vor der Berechnung des gesamten Arrays. Auch dies ist ein Speicher-Problem.Dieses problem zu umgehen, könnten Sie versuchen, verwenden Sie eine 64-bit-Kopie von Python, oder noch besser einen Weg finden, schreiben Sie die Ergebnisse in eine Datei. Zu diesem Zweck betrachten numpy ist memory-mapped-arrays.
Sollten Sie in der Lage zu führen Sie die gesamte Gruppe der Berechnung in eines dieser arrays als die eigentlichen Daten werden auf Festplatte geschrieben, und nur ein kleiner Teil davon im Speicher gehalten.
InformationsquelleAutor der Antwort thomas
Gibt es keinen memory-Grenze von Python. Allerdings erhalten Sie eine
MemoryError
wenn Sie aus dem RAM. Sie sagen, Sie haben 20301 Elemente in derlist
. Dies scheint zu klein, um zu einem memory-error für einfache Datentypen (z.B.int
), aber wenn jedes element selbst ist ein Objekt, das nimmt eine Menge Speicher, können Sie auch running out of memory.Den
IndexError
jedoch ist wahrscheinlich, weil IhreListTemp
hat nur 19767 Elementen (index von 0 bis 19766), und Sie versuchen, den Zugang hinter das Letzte element.Es ist schwer zu sagen, was Sie tun können, um zu vermeiden, dass die Grenze, ohne zu wissen, was genau es ist, dass Sie versuchen zu tun. Mit
numpy
helfen könnte. Es sieht aus wie Sie die Speicherung einer großen Menge von Daten. Kann es sein, dass Sie nicht brauchen, um zu speichern Sie alle es auf jeder Stufe. Aber es ist unmöglich zu sagen, ohne es zu wissen.InformationsquelleAutor der Antwort MAK
Wenn Sie möchten, um dieses problem zu umgehen können Sie auch das Regal. Dann würden Sie Dateien erstellen, wäre die Größe Ihrer Maschinen Kapazität zu handhaben, und nur legte Sie auf den RAM, wenn nötig, grundsätzlich das schreiben auf die HD ziehen und die Informationen zurück in Stücken, so kannst du es verarbeiten.
Erstellen binary-Datei und überprüfen Sie, ob Informationen bereits, wenn ja eine lokale variable, ihn zu halten, sonst schreiben einige Daten, die Sie für notwendig erachten.
Hoffe es klingt nicht zu archaischen.
InformationsquelleAutor der Antwort Eduardo Dias Florentino