Saya menggunakan python untuk menganalisis beberapa file besar dan saya mengalami masalah memori, jadi saya telah menggunakan sys.getsizeof () untuk mencoba dan melacak penggunaan, tetapi perilakunya dengan array numpy adalah aneh. Berikut ini contoh yang melibatkan peta albedo yang harus saya buka:
>>> 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
Yah data masih di sana, tetapi ukuran objek, peta 3600x7200 piksel, telah berubah dari ~ 200 Mb menjadi 80 byte. Saya ingin berharap masalah ingatan saya selesai dan hanya mengubah segalanya menjadi array numpy, tetapi saya merasa bahwa perilaku ini, jika benar, dalam beberapa cara akan melanggar beberapa teori teori informasi atau termodinamika, atau sesuatu, jadi saya cenderung percaya bahwa getsizeof () tidak berfungsi dengan array numpy. Ada ide?
getsizeof
indikator konsumsi memori tidak dapat diandalkan, terutama untuk ekstensi pihak ke-3.
resize
adalah mengembalikan a view
, bukan array baru. Anda mendapatkan ukuran tampilan, bukan data aktual.
sys.getsizeof(albedo.base)
akan memberikan ukuran non-view.
sys.getsizeof
: "Kembalikan ukuran objek dalam byte. Objek tersebut dapat berupa jenis objek apa pun. Semua objek bawaan akan mengembalikan hasil yang benar, tetapi ini tidak harus berlaku untuk ekstensi pihak ketiga seperti itu implementasi spesifik. Hanya konsumsi memori yang secara langsung dikaitkan dengan objek dipertanggungjawabkan, bukan konsumsi memori objek yang dimaksud. "