मैं कुछ बड़ी फ़ाइलों का विश्लेषण करने के लिए अजगर का उपयोग कर रहा हूं और मैं स्मृति मुद्दों में चल रहा हूं, इसलिए मैं उपयोग करने के लिए प्रयास करने और रखने के लिए sys.getizeof () का उपयोग कर रहा हूं, लेकिन यह खस्ता सरणियों के साथ व्यवहार विचित्र है। यहाँ एक उदाहरण है जिसमें अल्बेडोस का एक नक्शा शामिल है जिसे मैं खोलने जा रहा हूँ:
>>> 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
वैसे अभी भी डेटा है, लेकिन ऑब्जेक्ट का आकार, 3600x7200 पिक्सेल का नक्शा, ~ 200 एमबी से 80 बाइट तक चला गया है। मैं आशा करना चाहता हूं कि मेरी मेमोरी के मुद्दे खत्म हो गए हैं और बस सब कुछ सुन्न सरणियों में बदल दिया है, लेकिन मुझे लगता है कि यह व्यवहार, अगर सच है, तो किसी तरह से सूचना सिद्धांत या थर्मोडायनामिक्स के कानून, या कुछ और का उल्लंघन होगा। विश्वास है कि getizeof () सुन्न सरणियों के साथ काम नहीं करता है के लिए इच्छुक है। कोई विचार?
getsizeof
मेमोरी खपत का एक अविश्वसनीय संकेतक बनाता है ।
resize
एक लौट रहा है view
, एक नया सरणी नहीं। आपको दृश्य का आकार मिल रहा है, वास्तविक डेटा नहीं।
sys.getsizeof(albedo.base)
गैर-दृश्य का आकार देगा।
sys.getsizeof
: "बाइट्स में किसी ऑब्जेक्ट का आकार लौटाएं। ऑब्जेक्ट किसी भी प्रकार की ऑब्जेक्ट हो सकता है। सभी अंतर्निहित ऑब्जेक्ट सही परिणाम लौटाएंगे, लेकिन यह तीसरे पक्ष के एक्सटेंशन के लिए सही नहीं है। कार्यान्वयन विशिष्ट। केवल ऑब्जेक्ट के लिए सीधे मेमोरी की खपत के लिए जिम्मेदार है, न कि उन वस्तुओं की मेमोरी खपत जो इसे संदर्भित करता है। "