2011-08-15 11 views
6

मेरे पास अनियमित डेटा zi = f(xi, yi) का 2048x2048 जाल है जो अनिवार्य रूप से 2048 वास्तविक मानों के तीन स्वतंत्र सेट हैं। मैं 0 से 2047नियमित ग्रिड के लिए बड़े अनियमित ग्रिड के 2 डी इंटरपोलेशन

मैं griddata जो 1000x1000 की तुलना में कम छवियों पर अच्छी तरह से काम करने लगता है की कोशिश की है, लेकिन वार करने के लिए पूर्णांक मूल्यों को सुचारू रूप से करने के लिए अंतर्वेशन (शायद bicubic पट्टी) की wi = f(ui, vi) जहां ui और vi एक नियमित रूप से जाल में है कि जरूरत है जैसा कि आप 1500x1500 तक पहुंचते हैं (स्पष्ट रूप से डेलाउनी मेष के लिए मेमोरी कहल त्रुटियां)। मैंने ndimage कार्यों में से कुछ को देखा है, अर्थात् geometric_transform, RectBivariateSpline और map_coordinates, लेकिन वे सभी इनपुट के रूप में नियमित डेटा लेते हैं। मैं कुछ याद कर रहा था और इसे गलत भी लागू कर रहा था!

मैं इस मैटलैब स्क्रिप्ट को tformarray और makeresampler का उपयोग करके कर रहा हूं, यह करने के लिए पाइथन/विज्ञान का उपयोग करने का प्रयास कर रहा हूं। इस बड़े डेटा सेट को संसाधित करने के लिए मैं किस फ़ंक्शन का उपयोग कर सकता हूं इसके बारे में कोई सुझाव? धन्यवाद!

+4

मैं इस प्रश्न को देखता हूं: http://stackoverflow.com/questions/1972172/interpolating-a-scalar-field-in-a-3d-space मैंने सफलता से पहले शेपर्ड इंटरपोलेशन का उपयोग किया है और यह शायद आप के लिए काम करता हूं। – Yann

उत्तर

2

मैंने सफलता के बिना आपकी त्रुटियों को पुन: उत्पन्न करने का प्रयास किया। क्या आप 32 बिट सिस्टम पर हैं? मुझे scipy/numpy और बड़े सरणी के साथ समस्याएं थीं, इसलिए 64 बिट तक स्विच हो गईं, और तब से कोई समस्या नहीं थी।

यहाँ कोड मैं अपने त्रुटि पुन: पेश करने की कोशिश करने के लिए इस्तेमाल है (यह उपयोगी कुछ भी नहीं उत्पन्न होगा, लेकिन कम से कम एक ही त्रुटियों का अनुभव होना चाहिए):

y,x=indices([2048,2048],dtype='float64') 
z = randn(2048,2048) 
yr = y + randn(2048,2048) 
xr = x + randn(2048,2048) 
zn = griddata(xr.ravel(),yr.ravel(),z.ravel(),x,y) 
zl = griddata(xr.ravel(),yr.ravel(),z.ravel(),x,y,interp='linear') 

यह मेरा मशीन पर काम करता है।

यदि आप पाइथन का 64 बिट संस्करण नहीं चला सकते हैं (जो आप जिस ओएस का उपयोग कर रहे हैं उसके आधार पर मुश्किल हो सकता है), तो क्या आप अपना 2048x2048 ग्रिड 4 1024x1024 ग्रिड में तोड़ सकते हैं?

+0

मुझे griddata() को चलाने के लिए इनपुट पॉइंट्स और आउटपुट पॉइंट्स को टुपल्स में बदलना पड़ा। 12 जीबी के साथ मेरी 2011 मैकबुक पर आपके कोड ने 33 सेकंड में 1024x1024 किया, और 2048x2048 184 सेक –

+0

में कोड काम नहीं करता है। आयात के अलावा, आपको griddata() इनपुट को एक tuple में एक साथ ('xr.ravel(), yr.ravel()) 'और आउटपुट के साथ समान रूप से लपेटने की आवश्यकता है:' (x, y) ' –

संबंधित मुद्दे