2012-07-30 6 views
9

मेरे पास प्रशिक्षण मूल्यों का नियमित ग्रिड है (वेक्टर एक्स और वाई संबंधित ग्रिड xmesh और ymesh और zmesh के ज्ञात मानों के साथ) लेकिन एक बिखरे हुए/ragged/मूल्यों के अनियमित समूह को अलग करने के लिए (वेक्टर xI और yI, जहां हम zI [0] = f (xI [0], yI [0]) में रूचि रखते हैं ... zI [N-1] = f (xI [N -1], वाईआई [एन -1])। इस इंटरपोलेशन को अनुकूलन समस्या के हिस्से के रूप में लाखों बार बुलाया जाएगा, इसलिए ग्रिड बनाने और ट्रेस लेने वाली विधि का उपयोग करने के लिए प्रदर्शन बहुत महत्वपूर्ण है।साइप्पी के साथ पाइथन में फास्ट 2-डी इंटरपोलेशन बिखरी/अनियमित मूल्यांकन के लिए नियमित ग्रिड

अब तक, मैं एक scipy.interpolate फ़ंक्शन ढूंढने में सक्षम हूं जो बीपीएफ फ़ंक्शन के करीब आता है। हालांकि, क्योंकि यह एक बिखरे हुए इनपुट की कहानियां करता है, मुझे लगता है कि इसमें अच्छा प्रदर्शन नहीं है और मैं ' डी ली इसे स्पलीन, रैखिक, और निकटतम पड़ोसी इंटरपोलेशन विधियों के खिलाफ परीक्षण करने के लिए मैं बेहतर समझता हूं और मुझे उम्मीद है कि यह तेज़ होगा। इन सभी तरीकों को लागू करने वाले सभी तरीकों से मुझे पता चल सकता है कि प्रशिक्षण डेटा के रूप में नियमित ग्रिड लेते हैं (जैसे RectBivariateSpline) को मूल्यों के लिए नियमित ग्रिड की आवश्यकता होती है।

यह कोड उम्मीद करेगा कि मैं जो पूछ रहा हूं उसे स्पष्ट कर दूंगा।

import numpy as np 
import scipy as sp 
import scipy.interpolate as interp 

x = np.arange(0,2*np.pi,.1) 
y = x 
xmesh,ymesh = np.meshgrid(x,y) 
zmesh = np.sin(xmesh)+np.cos(ymesh) 
rbf = interp.Rbf(xmesh, ymesh, zmesh, epsilon=2) 
xI = np.arange(0,np.pi,.05) 
yI = xI 
XI, YI = np.meshgrid(xI,yI) 
# Notice how this is happy to take a vector or grid as input 
zI = rbf(xI, yI) 
ZI = rbf(XI,YI) # equiv. to zImesh 
myspline = interp.RectBivariateSpline(x, y, zmesh) 
# myspline takes vectors as input but makes them into meshes for evaluation 
splineoutput = myspline(xI, yI) 
# myspline returns ZI but I want zI 
print(splineoutput) 
print(ZI) 
print(zI) 

वहाँ कुछ मैं लेकिन जि (वेक्टर) प्राप्त करने के लिए RectBivariateSpline की तरह एक समारोह का उपयोग करने के लिए कर सकते हैं जि (जाल) के बजाय है? या वैकल्पिक रूप से, क्या फ़ंक्शन का एक और परिवार है जो वैकल्पिक अनुकूलन विधियों पर जिस तरह से काम करता है, और यदि ऐसा है, तो मुझे क्या देखना चाहिए?

बस एक त्वरित अनुस्मारक जो मैं खोज रहा हूं वह ग्रिड पॉइंट्स के बीच छोटी दूरी के साथ अपेक्षाकृत बड़े सरणी (20,000+ प्रविष्टियों) के साथ एक तेज़ अनुकूलन तकनीक है, और जहां डेटा बहुत चिकनी है। मुझे संदेह है कि मौजूदा पुस्तकालयों के साथ मुझे जो कुछ चाहिए, उसे करने के लिए एक अच्छा, सरल, तरीका है लेकिन मुझे यह नहीं मिल रहा है। सहायता के लिए धनयवाद।

उत्तर

8
+0

मैं वास्तव में क्या चाहते थे प्रतीत होता है कि। मुझे पता था कि मदद करने के लिए कुछ बनाया गया था। धन्यवाद! – BKay

+0

एन-आयामी मामले के लिए यह उत्तर भी देखें: http://stackoverflow.com/questions/16983843/fast-interpolation-of-grid-data – j13r

2

scipy v0.14.0 से, RectBivariateSpline.__call__() एक वैकल्पिक grid= कीवर्ड तर्क लेता जो True को चूक:

ग्रिड: bool

एक ग्रिड से फैला पर परिणामों का मूल्यांकन करना है या नहीं इनपुट सरणी, या इनपुट सरणी द्वारा निर्दिष्ट बिंदुओं पर।

तो तुम इस्तेमाल कर सकते हैं:

splineoutput = myspline(xI, yI, grid=False) 
संबंधित मुद्दे