Bazı büyük dosyaları analiz etmek için python kullanıyorum ve bellek sorunları ile çalışıyorum, bu yüzden kullanımı takip etmek ve denemek için sys.getsizeof () kullanıyorum, ancak numpy dizileri ile davranış tuhaf. İşte açmak zorunda olduğum bir albedos haritasını içeren bir örnek:
>>> 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
Veriler hala orada, ancak nesnenin boyutu, 3600x7200 piksel bir harita, ~ 200 Mb'dan 80 bayta çıktı. Bellek sorunlarımın bittiğini ve sadece her şeyi numpy dizilerine dönüştürdüğünü ummak isterim, ancak doğruysa bu davranışın bir şekilde bilgi teorisi veya termodinamik yasalarını veya bir şeyi ihlal edeceğini hissediyorum. getsizeof () yönteminin sayısal dizilerle çalışmadığına inanmaya meyilli. Herhangi bir fikir?
getsizeof
, özellikle 3. taraf uzantıları için bellek tüketiminin güvenilir olmayan bir göstergesidir .
resize
, bir döndürüyor olmasıdır view
. Gerçek veriyi değil, görünümün boyutunu elde edersiniz.
sys.getsizeof(albedo.base)
görüntülememenin boyutunu verecektir.
sys.getsizeof
: "Bir nesnenin boyutunu bayt cinsinden döndür. Nesne herhangi bir nesne türü olabilir. Tüm yerleşik nesneler doğru sonuçları döndürür, ancak bunun üçüncü taraf uzantıları için geçerli olması gerekmez. Uygulamaya özel. Yalnızca söz konusu nesnelerle ilişkilendirilen bellek tüketimi, söz konusu nesnelerin bellek tüketimini hesaba katmaz. "