J'ai un tableau numpy et je l'aplatis par np.ravel () et je suis confus quand j'ai essayé d'apprendre la taille des deux tableaux
array = np.arange (15) .reshape (3,5)
sys.getsizeof (tableau) 112
sys.getsizeof (array.ravel ()) 96
array.size 15
array.ravel (). taille 15
array = np.arange (30) .reshape (5,6)
sys.getsizeof (tableau) 112
sys.getsizeof (array.ravel ()) 96
array.size 30
Comme vu ci-dessus, deux tableaux différents ont la même taille de mémoire mais chacun a une quantité d'élément différente. Pourquoi cela arrive-t-il?
3 Réponses :
sys.getsizeof
ne renvoie pas la taille de la mémoire du tableau numpy, selon la documentation https://docs.python.org/2/library/sys.html#sys.getsizeof
pour trouver la taille de la mémoire d'un tableau numpy, utilisez nbytes
ou calculez-le en multipliant la taille par itemize
array.nbytes
array.size * array.itemsize
comme l'a souligné Joachim Wagner, il y a une légère surcharge pour chaque tableau qui peut être un problème si vous avez beaucoup de tableaux np ... le sys.getsizeof (tableau)
pourrait vous donner le taille de cette surcharge mais je ne suis pas sûr
Il y a une surcharge de mémoire supplémentaire pour l'objet python et pour indiquer à numpy le type des éléments, par exemple int32
ou float64
.
l'extension tierce signifie-t-elle les bibliothèques (faites par la communauté) de python?
oui, tout ce qui ne sort pas de la boîte avec python est un non intégré
Comme Derte l'a mentionné, sys.getsizeof
ne dit pas la taille du tableau. Le 96
que vous avez contient des informations sur le tableau (s'il est unidimensionnel) et le 112
s'il est multidimensionnel. Tout élément supplémentaire augmentera la taille de 8 octets en supposant que vous utilisez un dtype = int64
.
(1) ravel ()
généralement (voir les commentaires de @ user2357112 ci-dessous) renvoie un objet qui référence les éléments de l'entrée plutôt que de faire une nouvelle copie:
>>> sys.getsizeof(np.arange(20)) 256 >>> sys.getsizeof(np.arange(40)) 416 >>> sys.getsizeof(np.arange(400)) 3296
ravel ()
généralement renvoie une vue. Dans les cas où les pas d'entrée rendent impossible la création d'une vue à plat, ravel ()
fera une copie. Ceci est souvent oublié.
Idem avec reshape
.
Tous les tableaux que vous testez sont des vues et ne possèdent pas leur propre tampon de données