2017-09-11 68 views
0
x=np.asarray([1,2,4,5,7,8,9]) 
y=np.asarray([2,1,3,6,4,7,9]) 

m,b=np.polyfit(x,y,1) 

我有散點,並嘗試通過numpy polyfit做線性擬合(y = m * x + b,b = 0)。有沒有辦法強制攔截b爲0?我也可以有差異嗎?如何使用numpy polyfit強制散射點線性擬合通過零點?

我GOOGLE了一下,有人說np.linalg.lstsq可能工作,但我不知道如何操縱它。我更喜歡np.polyfit。它可以工作嗎?

回答

-1

線性代數也許矯枉過正這裏:

m = np.mean(y/x) 

將做的工作罰款不加權的相關性。

+0

這只是一個平均數,而不是最小二乘擬合。 –

+0

該OP沒有指定租賃廣場,但我在任何情況下都是錯誤的。我已經爲你的答案+1了。 –

1

np.polyfit沒有刪除低階項的方法。這裏是你如何與np.linlg.lstsq做到這一點:

m = np.linalg.lstsq(x.reshape(-1,1), y)[0][0] 
m 

0.87916666666666654 

這是一樣:

np.mean(y/x) 

0.98520408163265305 
+0

什麼是[0] [0]?它可以只是[0]或(0,0)?我可以有差異或其他參數嗎? –

+0

不,'np.linalg.lstsq'輸出一個數組列表,所以第一個'[0]'是列表理解,然後下一個'[0]'是數組理解。殘差將是'[1] [0]'。查看[docs](https://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.lstsq.html)以查看還有哪些'np.linalg.lstsq'輸出,但其中大部分不是在這種情況下很有用。 –