2010-11-28 21 views
5

का उपयोग करके प्लॉट किए गए डेटा से एक्सट्रापोलेशन मेरे पास मेरी फ़ाइल में एक्स और वाई के 10 मान हैं।matplotlib

क्या कोई तरीका है कि मैं ग्राफ को extrapolate कर सकते हैं यानी इसे एक निरंतर कार्य में बनाते हैं और matplotlib में अन्य एक्स-मानों के लिए अपनी सीमा में वृद्धि ??

यदि कोई अन्य सॉफ्टवेयर है जिसका उपयोग मैं कर सकता हूं तो मैं भी आभारी हूं। मैं मूल रूप से चाहता हूं कि ये 10 मान एक निरंतर कार्य के लिए अनुमानित हो जाएं ताकि मैं कुछ यादृच्छिक एक्स बिंदु पर y-value को जान सकूं।

उत्तर

12

नीचे मैं SciPy, लेकिन ही कार्य (polyval और polyfit) का उपयोग NumPy में भी कर रहे हैं; NumPy एक Matplotlib निर्भरता है ताकि आप वहां से उन दो कार्यों को आयात कर सकें यदि आपके पास SciPy इंस्टॉल नहीं है।

import numpy as NP 
from scipy import polyval, polyfit 
from matplotlib import pyplot as PLT 

n=10 # 10 data points 
# make up some data 
x = NP.linspace(0, 1, n) 
y = 7*x**2 - 5*x + 3 
# add some noise 
noise = NP.random.normal(.5, .3, 10) 
y += noise 

# the shape of the data suggests a 2d polynomial, so begin there 
# a, b, c are the polynomial coefficients: ax^2 + bx + c 
a, b, c = polyfit(x, y, 2) 
y_pred = polyval([a, b, c], x) # y_pred refers to predicted values of y 

# how good is the fit? 
# calculate MSE: 
MSE = NP.sqrt(NP.sum((y_pred-y)**2)/10) 
# MSE = .2 

# now use the model polynomial to generate y values based on x values outside 
# the range of the original data: 
x_out = NP.linspace(0, 2, 20) # choose 20 points, 10 in, 10 outside original range 
y_pred = polyval([a, b, c], x_out) 

# now plot the original data points and the polynomial fit through them 
fig = PLT.figure() 
ax1 = fig.add_subplot(111) 

ax1.plot(x, y, 'g.', x_out, y_pred, 'b-') 

PLT.show() 

alt text

5

यदि आप SciPy (वैज्ञानिक पायथन) का उपयोग कर रहे हैं तो आप scipy.interp1d का प्रयास कर सकते हैं। उदाहरण के लिए manual देखें।

अन्यथा, किसी भी सभ्य स्प्रेडशीट सॉफ़्टवेयर को स्पलीन इंटरपोलेशन करने में सक्षम होना चाहिए और आपको एक अच्छा चिकना ग्राफ देना चाहिए।

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

उदाहरण (संपादित):

from scipy.interpolate import interp1d 

# the available data points 
x = [1, 2, 3] 
y = [10, 20, 30] 

# return a function f, such that f(x) is the interpolated value at 'x' 
f = interp1d(x, y, kind='cubic') 

अब आप किसी भी बिंदु x पर समारोह f(x) गणना कर सकता है। उदाहरण के लिए print f(2.5) x = 2.5 के लिए इंटरपोलेटेड मान वापस कर देगा।

0

आप क्या चाहते हैं में से अधिकांश यहां पाया जा सकता है: http://docs.scipy.org/doc/scipy/reference/tutorial/interpolate.html

लेकिन का पूर्वानुमान नहीं है, कम से कम जब तक आप पूरी तरह से सुनिश्चित करें कि आप जानते हैं कि आप क्या कर रहे हैं कर रहे हैं।