2014-06-26 64 views

回答

2

你可以使用scipy.optimize.fsolve

X = np.array([1, 2, 3]) 
Y = np.array([2, 4, 6]) 
s = 2 

def f(i): 
    """Fixed slope 1-deg polynomial residuals""" 
    return ((Y - (s*X + i))**2).sum() 

它執行大致相同polyfit

In [37]: np.polyfit(X, Y, 1) 
Out[37]: array([ 2.00000000e+00, 2.30755522e-15]) 

In [38]: fsolve(f, x0=1) 
Out[38]: array([ 1.63883763e-16]) 

而改變斜率:

In [39]: s = 4 

In [40]: fsolve(f, x0=1) 
Out[40]: array([-3.99075568]) 

我們得到一個新的最佳

3

如果擬合方程爲y = a*x + b,你可以找到攔截b最適合你的數據,給定一個固定斜率a = A,如:

b = np.mean(y - A*x) 

相反,如果你有一個固定的攔截b = B,想要找坡最適合您的數據,數學作品出來:

a = np.dot(X, Y-B)/np.dot(X, X) 
+0

誠然,對於一個快速的答案(我實際使用),但我想的東西,將採取的這些程序算法的優勢。 – gmaravel

+1

我很確定沒有默認的內置方法來修正fit中的一些參數,但如果您知道這是如何在內部工作的話,那麼做起來非常簡單。如果你能建議一個界面,我可以爲下一個numpy發佈放置一個PR ... – Jaime