我不明白如何將 np.polyval 遷移到 np.polynomial.polynomial.polyval。由于系數順序的反轉,我用 [::-1] 解釋了這一點,但繪圖仍然存在問題。
1-創建一個稍后繪制的函式
def f(x):
return np.sin(x) 0.5 * x
x = np.linspace(-2 * np.pi, 2 * np.pi, 50)
使用舊方法,它可以作業:
old_polyfit =np.polyfit(x, f(x), 1)
old_polyval = np.polyval(old_polyfit , x)
plt.plot(x, f(x), 'b', label='f(x)')
plt.plot(x, old_polyval, 'r.', label='regression')
我的問題:我使用新方法,有兩個問題,
1-
new_polyfit =np.polynomial.polynomial.polyfit(x, f(x), 1)
new_polyval = np.polynomial.polynomial.polyval(new_polyfit[::-1], x)
我看到 New_polfit 沒有計算 old_polyfit 的倒數,它應該從 coef 順序改變..
2- 用 new_polyval = np.polynomial.polynomial.polyval(new_polyfit[::-1], x) 繪圖
錯誤 --> 1) plt.plot(x, new_polyval, 'r.', label='regression') 2) x 和 y 必須具有相同的第一維,但具有形狀 (50,) 和 (2,)
plt.plot(x, f(x), 'b', label='f(x)')
plt.plot(x, new_polyval, 'r.', label='regression')
我不明白為什么 old_polyval 的大小為 (50,) 而 newpolyval 的大小為 (2,)。
uj5u.com熱心網友回復:
新的 poly 包不僅反轉了系數的順序,還反轉了引數的順序。一旦你開始出錯,你有沒有回去閱讀檔案?
你的功能:
In [305]: def f(x):
...: return np.sin(x) 0.5 * x
...:
...: x = np.linspace(-2 * np.pi, 2 * np.pi, 50)
舊版:
In [308]: old_polyfit =np.polyfit(x, f(x), 1)
...: old_polyval = np.polyval(old_polyfit , x)
In [309]: old_polyfit
Out[309]: array([ 4.28841952e-01, -7.45793918e-17])
In [310]: old_polyval
Out[310]:
array([-2.69449345, -2.58451412, -2.4745348 , -2.36455548, -2.25457615,
-2.14459683, -2.0346175 , -1.92463818, -1.81465885, -1.70467953,
-1.5947002 , ..., 2.14459683,
2.25457615, 2.36455548, 2.4745348 , 2.58451412, 2.69449345])
您的新嘗試:
In [311]: new_polyfit =np.polynomial.polynomial.polyfit(x, f(x), 1)
...: new_polyval = np.polynomial.polynomial.polyval(new_polyfit[::-1], x)
In [312]: new_polyfit
Out[312]: array([-1.88411095e-16, 4.28841952e-01])
In [313]: new_polyval
Out[313]: array([-10.66365141, -6.28318531])
系數順序的切換是明確的;為什么要開關?這是開發人員解釋的。
閱讀檔案我看到新的polyval期望(x,c)順序:
In [317]:
...: new_polyval = np.polynomial.polynomial.polyval(x, new_polyfit)
In [318]: new_polyval
Out[318]:
array([-2.69449345, -2.58451412, -2.4745348 , -2.36455548, -2.25457615,
-2.14459683, -2.0346175 , -1.92463818, -1.81465885, -1.70467953,
-1.5947002 , ... 2.14459683,
2.25457615, 2.36455548, 2.4745348 , 2.58451412, 2.69449345])
這些匹配舊的。
我們也可以將 newfit 值與 old 一起使用val,只需反轉系數即可。
In [320]: old_polyval = np.polyval(new_polyfit[::-1] , x)
In [321]: old_polyval
Out[321]:
array([-2.69449345, -2.58451412, -2.4745348 , -2.36455548, -2.25457615,
-2.14459683, -2.0346175 , -1.92463818, -1.81465885, -1.70467953,
-1.5947002 , ... 2.14459683,
2.25457615, 2.36455548, 2.4745348 , 2.58451412, 2.69449345])
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/487626.html
