python numpy sys

Uso de memoria Python de matrices numpy



sys (2)

Lo siguiente funciona sin la necesidad de crear una nueva matriz:

import numpy as np a = np.arange(81).reshape(9,9) size_in_bytes = a.size * a.dtype.itemsize

Estoy usando Python para analizar algunos archivos de gran tamaño y estoy teniendo problemas de memoria, así que he estado usando sys.getsizeof () para intentar hacer un seguimiento del uso, pero su comportamiento con matrices numpy es extraño. Aquí hay un ejemplo que implica un mapa de albedos que tengo que abrir:

>>> 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

Bueno, los datos siguen ahí, pero el tamaño del objeto, un mapa de 3600x7200 píxeles, ha pasado de ~ 200 Mb a 80 bytes. Me gustaría esperar que mis problemas de memoria hayan terminado y simplemente convertir todo en matrices numpy, pero creo que este comportamiento, si es cierto, de alguna manera violaría alguna ley de la teoría de la información o la termodinámica, o algo así, así que estoy inclinado a creer que getsizeof () no funciona con matrices numpy. ¿Algunas ideas?


Puede usar array.nbytes para matrices numpy, por ejemplo:

>>> import numpy as np >>> from sys import getsizeof >>> a = [0] * 1024 >>> b = np.array(a) >>> getsizeof(a) 8264 >>> b.nbytes 8192