गदल डाटसेट.राडासएर्रे () पाइथन को क्रैश कर देता है


13

मैं नेम्पी 1.3 के साथ पायथन 2.6.5 (32 बिट) और विंडोज 7 64 बिट पर स्थापित गाल्ड 1.9.1 का उपयोग कर रहा हूं। मैं एक 800 एमबी इमेजिन (.img) रेखापुंज डेटासेट पढ़ने की कोशिश कर रहा हूँ एक नास्टी सरणी में कुछ रेखापुंज बीजगणित करने के लिए, लेकिन जैसे ही मैं निम्नलिखित कोड चलाता हूं, Python.exe क्रैश हो जाता है।

from osgeo import gdal

g = gdal.Open(r'path\to\dataset', gdal.GA_Readonly)
b = g.GetRasterBand(1)
data = b.ReadAsArray()

Python.exe b.ReadAsArray()कॉल पर क्रैश हो जाता है । मैंने कुछ Google खोज और Gdal 1.6 से दिनांकित लेख पाए, जिन्होंने इस मुद्दे का उल्लेख विंडोज 7 64 बिट के साथ किया था, लेकिन उन्होंने यह भी उल्लेख किया कि यह उस समय के नवीनतम विकास संस्करणों में तय किया गया था।

क्या किसी और के सामने ये समस्या आई थी? किसी भी काम?

अपडेट करें:

मैंने PyDev में कोड को डीबग करने का निर्णय लिया, यह निर्धारित करने की कोशिश करने के लिए कि यह कहाँ विफल हो रहा है। मैं जो बता सकता हूं (अभी भी कोई त्रुटि संदेश नहीं मिल रहा है) वह gdal_array.py की लाइन 22 पर विफल हो रहा है।

_mod = imp.load_module('_gdal_array', fp, pathname, description)

जब मैं ऊपर कोड की पंक्ति में कदम, यह मेरे में लाता है init numpy के .py मॉड्यूल। जब मैं सुन्न के अंत तक पहुँचता हूँ। __ init __ .py मॉड्यूल, यह कोड की उपरोक्त रेखा पर वापस कदम रखता है। फिर, जब मैं कदम को बटन में मारता हूं, जो मुझे gdal_array.py के भीतर अगली पंक्ति में लाना चाहिए, तो स्क्रिप्ट बिना किसी त्रुटि संदेश या कुछ भी के साथ समाप्त हो जाती है।

अद्यतन # 2:

मैंने GDAL 1.9.1 की स्थापना रद्द कर दी है और PyDon Cheeseshop और OSGeo के Windows Binaries से GDAL 1.6.1 स्थापित किया है। अभी भी यही मुद्दा था।


मैं इस मुद्दे पर आ रहा था। क्या आप gas.internals पर तमस से गाल्ड पायथन बाइंडिंग का उपयोग कर रहे हैं? यदि ऐसा है, तो अपने पैटिशन को अपने पैट में आगे की ओर ले जाएं। कुछ अन्य पुस्तकालय मेरे लिए कुछ समस्या पैदा कर रहे थे।
जे लॉरा

मेरा मानना ​​है कि मैंने उसके इंटर्न से डाउनलोड किया। मैं कल जब कार्यालय में पहुंचूंगा तो अपने रास्ते को समायोजित करने की कोशिश करूंगा। सलाह के लिए धन्यवाद।
ब्रायन

1
अगर वह काम नहीं करता है, तो मैंने हाल ही में इन पैकेजों का उपयोग करने के लिए स्विच किया - lfd.uci.edu/~gohlke/pythonlibs
Jay Laura

मैंने अपने सिस्टम पाथ (विंडोज में पैठ पर्यावरण चर) में चारों ओर घूमने की कोशिश की। मैंने अपने GDAL के संस्करण को भी अनइंस्टॉल किया और आपके द्वारा दिए गए लिंक पर GDAL का संस्करण स्थापित किया और अभी भी वही समस्या थी।
ब्रायन

हम्मम .... जिस संस्करण से मैं जुड़ा था वह केवल बाइंडिंग था, इसलिए आपको अभी भी तमास से जीडीएएल कोर की आवश्यकता है। यदि अन्य कॉल ने काम किया है, तो वह ठीक काम कर रहा है। कोशिश करने के लिए तीन चीजें जो लंबे शॉट्स हैं ('देशांतर ’के क्रम में। 1) Numpy के अपने संस्करण को अपडेट करें। 2) gdal_translate को gtiff पर ले जाएँ और उस चित्र पर कोड आज़माएँ। 3)। के साथ ReadAsArray () जोड़ें (numpy.float32)। क्या छवि सार्वजनिक है? मैं अपनी मशीन पर इसका परीक्षण कर सकता हूं। क्या आप स्टैक ट्रेस पोस्ट कर सकते हैं यदि उनमें से कोई भी काम नहीं करता है?
जे लॉरा

जवाबों:


5

जैसा कि कई टिप्पणीकारों द्वारा संदेह किया गया था, यह मेरी स्थापना के साथ एक मुद्दा था। जाहिरा तौर पर, मैं GDAL और पायथन बाइंडिंग स्थापित करते समय पर्याप्त ध्यान नहीं दे रहा था।

मैंने gisinternals.com से GDAL Core और plugins (dll) स्थापित किए, लेकिन किसी तरह मैंने वहां से भी Python Bindings को स्थापित करने के बारे में नहीं सोचा। मेरे द्वारा स्थापित पायथन बाइंडिंग एक अलग साइट से थे (यह याद नहीं है कि इस बिंदु पर कौन सा है)।

जब मैंने gisinternals.com से GDAL और Python Bindings को पुन: स्थापित किया, तो मैं ReadAsAray को सफलतापूर्वक सक्षम कर पाया।

टिप्पणी और जवाब देने वाले सभी को धन्यवाद और मैं अपनी अज्ञानता के लिए माफी माँगता हूँ।


3

यह संभव है कि यह एक स्मृति मुद्दा हो। जब आप ReadAsArray का उपयोग करते हैं, तो यह डेटा को मेमोरी में लाता है, और जबकि 800mb बड़े पैमाने पर नहीं है, यह छोटा भी नहीं है। क्या आपने विखंडू में सरणी पढ़ने की कोशिश की है?

data = b.ReadAsArray(x_offset, y_offset, x_size, y_size)

आपको सरणी के माध्यम से लूप करने में सक्षम होना चाहिए और इसे एक बार में चंक करने की प्रक्रिया करनी चाहिए, हालांकि आप जो प्रसंस्करण कर रहे हैं, उसके आधार पर आपको संभवतः बढ़त प्रभावों से बचने के लिए ओवरलैप वाले क्षेत्रों में पढ़ना चाहिए।


मैंने विखंडू का उपयोग करने की कोशिश की। मैंने data = b.ReadAsArray(0,0, 500, 500)उसी परिणाम के साथ कोशिश की ।
ब्रायन

हम्म। मैं मान रहा हूं कि आपने अन्य छवि प्रारूप आज़माए हैं? इसके अलावा, क्या कोई विशिष्ट त्रुटि संदेश था?
om_henners

मैंने अभी तक किसी अन्य प्रारूप की कोशिश नहीं की है। कोई त्रुटि संदेश नहीं था, बस एक पॉपअप ने कहा कि "python.exe ने काम करना बंद कर दिया है"।
ब्रायन

मैंने आज सुबह .img फ़ाइल को एक GeoTIFF में बदल दिया और फिर से कोशिश की। कोई भाग्य नहीं।
ब्रायन

क्या मेमोरी का फ़ाइल गदल से मैप करने का कोई तरीका है?
CMCDragonkai

1

क्षमा करें, मुझे इस पार्टी में देर हो गई है, लेकिन आपकी मूल समस्या यह है कि 32-बिट पायथन स्मृति में बहुत बड़ी आपदाओं को संग्रहीत नहीं कर सकता है। आप अपने बड़े रेखापुंज को स्मृति में काट-छाँट के आकार में पढ़ सकते हैं, लेकिन तब आप बेहद अक्षम / लगातार पढ़ने / लिखने के लिए कुशलतापूर्वक प्रक्रिया कर सकते हैं।

इसके बजाय मैं क्या करता हूं (जो डिस्क रीड / राइट्स के कारण कुछ दक्षता का त्याग करता है) कॉल करना है ( एक्सई-रैपिंग के माध्यम से ) 64-बिट gisinternals.com संस्करण जो भी गदल विधि की आवश्यकता है। अजगर के सबप्रोसेस मॉड्यूल को एक लूप में उपयोग करने से सावधान रहें (यानी आप सबप्रोसेस को क्रमिक रूप से कॉल करने की आवश्यकता / कर सकते हैं ) क्योंकि आप अनजाने में अपने विंडोज़ बॉक्स के लिए बहुत सारे खुले धागे उत्पन्न कर सकते हैं और अशुभ सिस्टम चेतावनी प्राप्त कर सकते हैं। आप इस गदल दृष्टिकोण के साथ पढ़ने / लिखने के लिए डिस्क को लिखने के तरीके में थोड़ा सा त्याग करते हैं, लेकिन आपकी प्रसंस्करण दक्षता केवल घट जाती है (यानी एक हल्के तेज इन-मेमोरी गणना के सापेक्ष , यदि आपका बॉक्स / पुस्तकालय इसका समर्थन कर सकता है) एक कारक के बारे में या 10।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.