232 votes

Utilisation de la mémoire Python par les tableaux numpy

Je suis à l'aide de python pour analyser certains fichiers volumineux et je suis en cours d'exécution dans des problèmes de mémoire, j'ai donc été à l'aide de sys.getsizeof() pour essayer de garder la trace de l'utilisation, mais c'est le comportement des matrices avec numpy est bizarre. Voici un exemple d'implication d'une carte de albédos que je vais avoir à ouvrir:

>>> import numpy as np
>>> import struct
>>> from sys import getsizeof
>>> f = open('Albedo_map.assoc', 'rb')
>>> getsizeof(f)
144
>>> albedo = struct.unpack('%df' % (7200*3600), f.read(7200*3600*4))
>>> getsizeof(albedo)
207360056
>>> albedo = np.array(albedo).reshape(3600,7200)
>>> getsizeof(albedo)
80

Bien que les données est toujours là, mais la taille de l'objet, un 3600x7200 pixel de la carte, est passé de ~200 Mo à 80 octets. J'aimerais espère que mes problèmes de mémoire sont au-dessus et juste tout convertir des tableaux numpy, mais j'ai l'impression que ce comportement, s'il était vrai, d'une certaine façon violer une loi de la théorie de l'information ou de la thermodynamique, ou quelque chose, de sorte que je suis enclin à croire que getsizeof() ne fonctionne pas avec les tableaux numpy. Des idées?

351voto

GWW Points 20316

Vous pouvez utiliser array.nbytes pour les tableaux numpy, par exemple:

 >>> a = [0] * 1024
>>> b = np.array(a)
>>> getsizeof(a)
8264
>>> b.nbytes
8192
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X