Estou usando o python para analisar alguns arquivos grandes e estou com problemas de memória, por isso tenho usado o sys.getsizeof () para tentar acompanhar o uso, mas seu comportamento com matrizes numpy é bizarro. Aqui está um exemplo envolvendo um mapa de albedos que estou tendo 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
Bem, os dados ainda estão lá, mas o tamanho do objeto, um mapa de 3600x7200 pixels, passou de ~ 200 Mb para 80 bytes. Gostaria de ter esperança de que meus problemas de memória tenham acabado e convertido tudo em matrizes numpy, mas acho que esse comportamento, se verdadeiro, de alguma forma violaria alguma lei da teoria da informação ou da termodinâmica, ou algo assim, então estou inclinado a acreditar que getsizeof () não funciona com matrizes numpy. Alguma ideia?
getsizeof
um indicador não confiável de consumo de memória, especialmente para extensões de terceiros.
resize
retorno de uma view
matriz, não de uma nova. Você está obtendo o tamanho da visualização, não os dados reais.
sys.getsizeof(albedo.base)
fornecerá o tamanho da não visualização.
sys.getsizeof
: "Retorne o tamanho de um objeto em bytes. O objeto pode ser qualquer tipo de objeto. Todos os objetos internos retornarão resultados corretos, mas isso não precisa ser verdadeiro para extensões de terceiros, pois é implementação específica. Somente o consumo de memória diretamente atribuído ao objeto é contabilizado, não o consumo de memória dos objetos a que ele se refere. "