Bei einem Nicht-Objekt dtype besteht das meiste des NPY-Dateiformats aus einem Dump der Rohbytes der Daten des Arrays. Das wären 4 oder 8 Bytes pro Element, abhängig davon, ob Ihr NumPy standardmäßig 4- oder 8-Byte-Ganzzahlen verwendet. Aus der Dateigröße sieht es aus wie 4 Bytes pro Element.
Bei einem Objekt dtype besteht das meiste des npy-Dateiformats aus einer gewöhnlichen Beize des Arrays. Für kleine ganze Zahlen, wie sie in Ihrem Array verwendet die Gurke die K
Beize Opcode, lange Namen BININT1
„dokumentiert“ im pickletools
Modul:
I(name='BININT1',
code='K',
arg=uint1,
stack_before=[],
stack_after=[pyint],
proto=1,
doc="""Push a one-byte unsigned integer.
This is a space optimization for pickling very small non-negative ints,
in range(256).
"""),
Dies erfordert zwei Bytes pro ganzer Zahl, einen für den K
Opcode und ein Byte vorzeichenloser ganzzahliger Daten.
Beachten Sie, dass Sie die Dateigröße noch weiter reduzieren könnten, indem Sie Ihr Array mit dtype oder numpy.uint8
für ungefähr 1 Byte pro Ganzzahl speichern.
Welche Versionen von Python und NumPy verwenden Sie? – user2357112
Welche CPU-Architektur haben Sie? Und was genau ist der 'dtype' von' a'? 'np.int64'? oder 'np.int32?' –
Wie auch immer, die Objekte dtypes werden streng * langsamer *, aber es gibt mehrere Möglichkeiten, warum Sie eine kleinere Dateigröße bekommen. –