2015-11-27 11 views
7

में एक 2 डी बहुपद के लिए `polyfit` के समतुल्य मैंअजगर

z = (a0 + a1*x + a2*y + a3*x**2 + a4*x**2*y + a5*x**2*y**2 + a6*y**2 + 
    a7*x*y**2 + a8*x*y) 

दिया सरणियों x, y में a गुणांक के लिए एक कम से कम वर्गों समाधान खोजने के लिए चाहते हैं, और लंबाई 20 वर्ष की z मूल रूप से मैं numpy.polyfit के बराबर लेकिन 2 डी बहुपद के लिए देख रहा हूं।

This question समान है, लेकिन समाधान MATLAB के माध्यम से प्रदान किया जाता है।

+0

कोई खेद नहीं है, मैंने इसे वहां जोड़ा। –

+0

sklearn [कर्नेल रिज रिग्रेशन] है (http://scikit-learn.org/stable/modules/generated/sklearn.kernel_ridge.KernelRidge.html#sklearn.kernel_ridge.KernelRidge) लेकिन मुझे यकीन नहीं है कि आप ' अल्फा 0 से 0 क्या यह आपके लिए काम करेगा? – simonzack

+0

सिस्पी के स्प्लिंस उपयोगी हो सकते हैं: https://docs.scipy.org/doc/scipy/reference/tutorial/interpolate.html – Dietrich

उत्तर

9

यहाँ दिखा कैसे आप इस कार्य के लिए numpy.linalg.lstsq उपयोग कर सकते हैं एक उदाहरण है:

import numpy as np 

x = np.linspace(0, 1, 20) 
y = np.linspace(0, 1, 20) 
X, Y = np.meshgrid(x, y, copy=False) 
Z = X**2 + Y**2 + np.random.rand(*X.shape)*0.01 

X = X.flatten() 
Y = Y.flatten() 

A = np.array([X*0+1, X, Y, X**2, X**2*Y, X**2*Y**2, Y**2, X*Y**2, X*Y]).T 
B = Z.flatten() 

coeff, r, rank, s = np.linalg.lstsq(A, B) 

समायोजन गुणांक coeff हैं:

array([ 0.00423365, 0.00224748, 0.00193344, 0.9982576 , -0.00594063, 
     0.00834339, 0.99803901, -0.00536561, 0.00286598]) 

ध्यान दें कि coeff[3] और coeff[6] क्रमशः X**2 और Y**2 के अनुरूप है, और वे 1. के करीब हैं क्योंकि उदाहरण डेटा Z = X**2 + Y**2 + small_random_component के साथ बनाया गया था।

+1

इन पंक्तियों में से प्रत्येक के साथ आपका लक्ष्य क्या है? 'जेड = एक्स ** 2 + वाई ** 2 + एनपी.रैंडम.रैंड (* एक्स.शिप) * 0.01' ' ए = एनपी.एरे ([एक्स * 0 + 1, एक्स, वाई, एक्स * * 2, एक्स ** 2 * वाई, एक्स ** 2 * वाई ** 2, वाई ** 2, एक्स * वाई ** 2, एक्स * वाई])। टी' आप इस matrices क्यों flatten? 'एक्स = एक्स.फ्लैटन()' 'वाई = वाई.फ्लैटन()' – xeon123

+0

@ xeon123 'जेड' के लिए अभिव्यक्ति वाला लक्ष्य केवल सतह फिट का परीक्षण करने के लिए डेटा का नमूना बनाना है। मुझे 'एक्स' और' वाई 'को फ़्लैट करना पड़ा था, जैसे कि' ए' 2 डी सरणी बन जाती है, जो 'lstsq' solvers द्वारा आवश्यक प्रारूप है। –