J'utilise python pour analyser certains fichiers volumineux et je rencontre des problèmes de mémoire, j'ai donc utilisé sys.getsizeof () pour essayer de garder une trace de l'utilisation, mais son comportement avec les tableaux numpy est bizarre. Voici un exemple impliquant une carte d'albédos que je dois 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
Eh bien, les données sont toujours là, mais la taille de l'objet, une carte de 3600x7200 pixels, est passée d'environ 200 Mo à 80 octets. J'espère que mes problèmes de mémoire sont terminés et que je convertis simplement tout en tableaux numpy, mais je pense que ce comportement, s'il est vrai, violerait d'une certaine manière une loi de la théorie de l'information ou de la thermodynamique, ou quelque chose comme ça, alors je suis enclin à croire que getsizeof () ne fonctionne pas avec les tableaux numpy. Des idées?
getsizeof
un indicateur peu fiable de la consommation de mémoire, en particulier pour les extensions tierces.
resize
renvoyer un view
tableau, pas un nouveau tableau. Vous obtenez la taille de la vue, pas les données réelles.
sys.getsizeof(albedo.base)
donnera la taille de la non-vue.
sys.getsizeof
: "Renvoie la taille d'un objet en octets. L'objet peut être n'importe quel type d'objet. Tous les objets intégrés renverront des résultats corrects, mais cela ne doit pas nécessairement être vrai pour les extensions tierces. spécifique à l'implémentation. Seule la consommation de mémoire directement attribuée à l'objet est prise en compte, et non la consommation de mémoire des objets auxquels il fait référence. "