簡體   English   中英

numpy.polyfit vs numpy.polynomial.polynomial.polyfit

[英]numpy.polyfit vs numpy.polynomial.polynomial.polyfit

為什么numpy.polyfitnumpy.polynomial.polynomial.polyfit在下面的測試中產生不同的圖?

import numpy as np
from numpy.polynomial.polynomial import polyfit
import matplotlib.pyplot as plt

x = np.linspace(0, 10, 50)
y = 5 * x + 10 + (np.random.random(len(x)) - 0.5) * 5

plt.scatter(x, y,marker='.', label='Data for regression')
plt.plot(np.unique(x), np.poly1d(np.polyfit(x, y, 1))(np.unique(x)), 
         label='numpy.polyfit')
plt.plot(np.unique(x), np.poly1d(polyfit(x, y, 1))(np.unique(x)), 
         label='polynomial.polyfit')
plt.legend()
plt.show()

在此處輸入圖片說明

乍一看,文檔似乎表明它們應該給出相同的結果 -

numpy.polyfit(x, y, deg, rcond=None, full=False, w=None, cov=False)

最小二乘多項式擬合。

擬合多項式p(x) = p[0] * x**deg + ... + p[deg]deg到點(x, y) 返回系數p的向量,該向量以deg, deg-1, ... 0的順序最小化平方誤差。

numpy.polynomial.polynomial.polyfit(x, y, deg, rcond=None, full=False, w=None)

多項式對數據的最小二乘擬合。

返回 deg 次多項式的系數,該多項式是對點 x 給出的數據值 y 的最小二乘擬合。 如果 y 是 1-D,則返回的系數也將是 1-D。 如果 y 是二維的,則進行多次擬合,y 的每一列都進行一次擬合,結果系數存儲在二維返回的相應列中。 擬合多項式的形式為

但區別在於從兩種方法返回的系數的順序,至少對於所討論的用例是這樣。

  • numpy.polyfit根據生成方程按度數降序返回系數
  • numpy.polynomial.polynomial.polyfit根據生成方程按度數升序返回系數

盡管在數學上相同,但這兩個方程在ndarray表示中並不相同。 在文檔中使用不同的符號可能會混淆這一點。 為了演示,請考慮以下內容

import numpy as np

x = np.linspace(0, 10, 50)
y = x**2 + 5 * x + 10

print(np.polyfit(x, y, 2))
print(np.polynomial.polynomial.polyfit(x, y, 2))
[ 1.  5. 10.]
[10.  5.  1.]

兩種方法都得到相同的結果,但順序相反,前者是np.poly1d()期望的,

print(np.poly1d(np.polyfit(x, y, 2)))
print(np.poly1d(np.polynomial.polynomial.polyfit(x, y, 2)))
   2
1 x + 5 x + 10
    2
10 x + 5 x + 1

后者是np.polynomial.polynomial.Polynomial()構造函數所期望的。,

print(np.polynomial.polynomial.Polynomial(np.polynomial.polynomial.polyfit(x, y, 2)))
print(np.polynomial.polynomial.Polynomial(np.polyfit(x, y, 2)))
poly([10.  5.  1.])  # 10 + 5 * x + 1 * x**2
poly([ 1.  5. 10.])  # 1 + 5 * x + 10 * x**2

翻轉從結果np.polynomial.polynomial.polyfit它傳遞給前poly1d()或使用np.polynomial.polynomial.Polynomial將產生預期的結果:

匹配輸出

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM