Memory Problem Numpy

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
erta2610
User
Beiträge: 3
Registriert: Freitag 3. Juni 2022, 07:33

Hallo,
Ich habe mit Windows 7 64-bit ein Programm zur Auswertung groesserer Datenmengen geschrieben und benutze numpy. Das Skript laeuft - keine Probleme.
Nun habe ich das Programm auf einem Server laufen lassen wollen (Windows 10 64-bit) und bekomme dort folgende Fehlermeldung:

numpy.core._exceptions.MemoryError: Unable to allocate 2.00 KiB for an array with shape (256,) and data type int64

Dieser Fehler bezieht sich auf die folgende Codezeile:
data=pd.read_csv('{}\{}'.format(path_input,file)).astype(np.uint8)

Leider finde ich dazu keinerlei Loesung - zumal mir 2 KiB nicht wirklich viel vorkommen :-)

Gruss,
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Ist das der erste Aufruf, bei dem ein numpy-Array alloziert wird? Funktioniert ein `np.array([1,2,3])`-Aufruf fehlerfrei?

Pfade sind keine Strings, da benutzt man keine Stringformatierungen, sondern nutzt das, was einem pathlib.Path bietet.
Wenn der Zahlentyp eh uint8 sein soll, dann gib das doch gleich beim Laden an:

Code: Alles auswählen

from pathlib import Path

...
path_input = Path(...)
...
data = pd.read_csv(path_input / filename, dtype=np.uint8)
erta2610
User
Beiträge: 3
Registriert: Freitag 3. Juni 2022, 07:33

Das normale numpy-array kann erstellt werden - keine Probleme.
Stringformatierung habe ich gaendert - kein Einfluss
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@erta2610: Ist die Datei denn grösser? Die 2 KiB sind nicht viel, aber es kann ja sein, dass vorher schon für ein oder mehrere grosse Array Speicher angefordert wurden, und die 2 KiB dann „das Fass zum überlaufen bringen“. Einlesen von CSV-Dateien kann auch durchaus deutlich mehr Speicher benötigen als das eingelesene Array am Ende, weil Datentypen und Datenmenge vor dem einlesen nicht bekannt sind. Den Datentyp direkt vorgeben, wie von Sirius3 vorgeschlagen kann dabei helfen.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
erta2610
User
Beiträge: 3
Registriert: Freitag 3. Juni 2022, 07:33

Hallo blackjack,

Ja, die Datei ist insgesamt groesser (ca. 200MB).
Ah, ich wusste nicht, dass die 2KiB dann nur den Rest angeben.

Was heisst den Datentyp direkt vorgeben? Wie mache ich das?
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@erta2610: Na das hat Sirius3 doch gezeigt wie man der Funktion mitteilt, welchen Datentyp die Elemente des Ergebnis haben sollen.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Antworten