我假設你想要一個最小二乘擬合,這是polyfit會給你的。
爲了實現這一點,您只需將兩個列表傳遞給polyfit,x值和y值,並且必須設置所需多項式的階數。因此,對於你的榜樣,這會變成是
import numpy as np
x = [3, 6]
y = [22, 41]
coeffs = np.polyfit(x, y, 1)
# get the y values of the resulting line
x = np.arange(1,11)
y_line = x * coeffs[0] + coeffs[1]
關於你的其他問題,您需要考慮polyfit的輸出。
爲numpy.polyfit
文檔說
的解決方案最小化的平方誤差
E = \ sum_ {J = 0}^K | P(x_j) - y_j |^2
在等式:
X [0] ** N * p [0] + ... + X [0] * p [N-1] + p [N] = Y [0]
x 1 ** N * P [0] + ... + X 1 * P [N-1] + P [N] = Y 1
...
X [k]的** N * p [0] + ... + x [k] * p [n-1] + p [n] = y [k]
我們使用了一個非常簡單的情況,線,我們有一階多項式,即n=1
。
這意味着在我們的例子中,y
的公式僅僅是y[k] = x[k]*p[0]+p[1]
。將其與行方程y = k*x+d
的一般形式進行比較。你會看到你的線的斜率只是coeffs[0]
。
至於繪圖,請看下面的例子
import numpy as np
from matplotlib import pyplot as plt
x = np.arange(1, 11)
y = [20, 21, 22, 26, 32, 41, 39, 36, 29, 23]
poly = np.polyfit(x, y, 1)
y_line = x * poly[0] + poly[1]
print poly[0]
plt.scatter(x, y)
plt.plot(x, y_line)
plt.show()
導致輸出
$ python test.py
1.21818181818
是有道理的,但我怎麼然後繪製線(得到它出現在我的圖上)以及顯示線的斜率? – nikhar
@nikhar在你的問題中包括這個會有些好處,不是嗎?我已經相應地更新了我的答案。 – sobek
@nikhar如果這符合你的問題,請隨時接受我的答案。 – sobek