Ich versuche, den Speicherverbrauch eines Python-Diktats zu reduzieren, das in meinem Fall als word-->document_id
"invertierter Index" dient. Jede word
wird als Integer Hashed, die 24 Bytes dauert.Speichern von Speicher von dict mit Bitarray anstelle von Int?
Ich frage mich, ob ich jedes Element innerhalb dict
Werte und jeden Schlüssel innerhalb dict
zu einem Bitarray stattdessen konvertieren kann. Ich habe festgestellt, dass der Maximalwert von int
weniger als 2^22
ist, also kann ich vielleicht nur ein Bit-Array von "Größe 22" zuweisen.
Wie kann das gemacht werden? Bisher habe ich gmpy2
und bitarray
Bibliotheken, sowie std::bitset
in der C++ stdlib gesehen, die ich mit Cython verwenden kann. Ich habe aus dieser post gelesen, dass bitarray
nicht so schnell wie gmpy
ist. In gmpy
bin ich mir nicht sicher, wie man die Größe einstellt. Schließlich frage ich mich, ob der Speicher-Overhead von gmpy
oder bitarray
Objekte in Python es wert ist, wenn ich einfach std::bitset
verwenden kann, die wahrscheinlich den geringsten Speicher von allen verwendet.
Ich kann 'std :: unordered_map' verwenden, um C-typisierte' unsigned int' zu speichern. Aber du sagst, es ist einfach besser, es ohne Bitarrays zu implementieren ..? – richizy
@richizy: Bitarrays werden nicht helfen. Ich denke, eine "unordered_map" könnte deine beste Einstellung sein. – user2357112
okay .. Ich habe nie realisiert, wie verrückt die Speicherreferenzen auf Python-Primitive sind – richizy