मैं कई दशकों में मासिक वर्षा का प्रतिनिधित्व रेखापुंज डेटासेट की एक बड़ी श्रृंखला है। मैं अजगर में एक स्क्रिप्ट है कि प्रत्येक रेखापुंज से अधिक लूप और करता है निम्नलिखित लिखा है:, एक नया जल स्तर की गणना करने केमेमोरी एरर प्राप्त किए बिना पाइथन में बड़े डेटासेट के माध्यम से मैं कैसे लूप करूं?
- एक numpy नकाबपोश सरणी के लिए रेखापुंज में बदलता है, सरणी बीजगणित के
- निष्पादित बहुत
- परिणाम आउटपुट रास्टर को परिणाम देता है।
- पुनर्प्रसारण
स्क्रिप्ट सिर्फ सरणी बीजगणित समीकरण एक पाश बयान से घिरा की एक लंबी सूची है।
अगर मैं अपने डेटा के एक छोटे से हिस्से (20 साल का मूल्य कहता हूं) पर स्क्रिप्ट चलाता हूं, तो सब ठीक काम करता है, लेकिन अगर मैं पूरी तरह से संसाधित करने की कोशिश करता हूं तो मुझे MemoryError
मिलता है। त्रुटि उस से अधिक जानकारी नहीं देती है (सिवाय इसके कि उस कोड में रेखा को हाइलाइट करता है जिस पर पायथन छोड़ दिया जाता है)।
दुर्भाग्य से, मैं आसानी से मात्रा में अपने डेटा को संसाधित नहीं कर सकते हैं - मैं वास्तव में एक ही बार में बहुत ऐसा करने में सक्षम होने की जरूरत है। ऐसा इसलिए है क्योंकि, प्रत्येक पुनरावृत्ति के अंत में, आउटपुट (जल स्तर) को प्रारंभिक पुनरावृत्ति के रूप में अगले पुनरावृत्ति में वापस खिलाया जाता है।
प्रोग्रामिंग की मेरी समझ वर्तमान में बहुत ही बुनियादी है, लेकिन मैंने सोचा कि मेरी वस्तुओं की सभी बस प्रत्येक पाश पर ओवरराइट किया जाएगा। मैं (बेवकूफ?) ने माना कि यदि कोड एक बार सफलतापूर्वक लूप करने में कामयाब रहा तो यह अधिक से अधिक स्मृति का उपयोग किये बिना अनिश्चित काल तक लूप करने में सक्षम होना चाहिए।
मैंने प्रलेखन के विभिन्न टुकड़ों को पढ़ने की कोशिश की और कुछ "कचरा कलेक्टर" कहा जाता है की खोज की है, लेकिन मुझे लगता है कि मैं अपने गहराई और मेरे मस्तिष्क के पिघलने से बाहर हो रही है! क्या कोई मेरे मूल loops जब स्मृति में वस्तुओं के वास्तव में क्या होता है में कुछ बुनियादी अंतर्दृष्टि प्रदान कर सकते हैं? क्या प्रत्येक लूप के अंत में फ्री-अप मेमोरी का कोई तरीका है, या क्या कोडिंग का कुछ और "पायथनिक" तरीका है जो इस समस्या को पूरी तरह से टालता है?
मुझे नहीं लगता कि लोग कुछ स्रोत कोड देखे बिना आपकी बहुत मदद कर सकेंगे। – GWW