Es effektiv 2 Teile an ein np.array
- Dem Objekt-Overhead und Attribute wie Form und Schritte, und einen Datenpuffer. Der erste hat ungefähr die gleiche Größe für alle Arrays, der zweite skaliert mit der Anzahl der Elemente (und der Größe jedes Elements). In numpy
ist der Datenpuffer unabhängig von der Array-Form 1d.
Mit nur 2 Elementen ist der Overhead-Teil Ihres Beispielarrays wahrscheinlich größer als der Datenpuffer. Aber mit 1000 Elementen geht das Größenverhältnis in die andere Richtung.
Wenn Sie das Array mit np.save
speichern, erhalten Sie eine grobe Vorstellung von der Speicherbelegung. Dieses Dateiformat schreibt einen Header-Puffer (256 Bytes?), Und der Rest ist der Datenpuffer.
Ich bin weniger vertraut mit C++ - Speicher, obwohl ich denke, dass das transparenter ist (wenn Sie die Sprache kennen).
Aber denken Sie daran, Effizienz beim Speichern eines Arrays ist nur ein Teil der Geschichte. In der Praxis müssen Sie über die Speicherbelegung nachdenken, wenn Sie Mathematik und Indizierung durchführen. Die ndarray
Unterscheidung zwischen view
und copy
macht es schwieriger vorherzusagen, wie viel Speicher verwendet wird.
In [1155]: np.save('test.npy',np.array([1,2]))
In [1156]: ls -l test.npy
-rw-rw-r-- 1 paul paul 88 Jun 30 17:08 test.npy
In [1157]: np.save('test.npy',np.arange(1000))
In [1158]: ls -l test.npy
-rw-rw-r-- 1 paul paul 4080 Jun 30 17:08 test.npy
Das sieht aus wie 80 Bytes Header und 4 * len Bytes für die Daten.
Ich würde vermuten, die C++ - Vektor - numpy Arrays werden wahrscheinlich mehr Metadaten (als Python-Typen, die ziemlich groß im Vergleich zu C-Typen sind) tragen. Abgesehen davon ist der Unterschied in der Speicherbelegung wahrscheinlich klein (unbedeutend), es sei denn, Sie erstellen viele Arrays. – mgilson
Vergessen Sie nicht den Overhead, den Sie benötigen, um einen dieser Datentypen aus der anderen Sprache zu verwenden. – user2357112
Auf den meisten modernen C++ - Implementierungen, die ich kenne, ist "int" 32 Bit. Wenn Sie einen 64-Bit-Typ wünschen, verwenden Sie 'std :: int64_t'. –