簡體   English   中英

我應該使用 numpy.polyfit 還是 numpy.polynomial.polyfit 還是 numpy.polynomial.polynomial.Polynomial?

[英]Should I use numpy.polyfit or numpy.polynomial.polyfit or numpy.polynomial.polynomial.Polynomial?

和有什么區別

https://docs.scipy.org/doc/numpy/reference/generated/numpy.polyfit.html

https://docs.scipy.org/doc/numpy/reference/generated/numpy.polynomial.polynomial.polyfit.html

我應該在什么時候使用哪一個?

我檢查了代碼,但是兩者都在他們的代碼中使用 numpy.linalg.linalg.lstsq,但在其他方面有所不同。

numpy.polyfit 的文檔也建議使用

https://docs.scipy.org/doc/numpy/reference/generated/numpy.polynomial.polynomial.Polynomial.fit.html

什么是正確的選擇?

(獎勵:當我想做的第一件事是適應我的數據時,我將如何使用 class?)

據我所知,這里有很多遺留包袱,我們不應該使用numpy.polyfit ,我們應該更喜歡numpy.polynomial.polynomial.Polynomial.fit

從 2016 年開始考慮對這個 github 問題的評論

雖然文檔相當清楚地指出返回的系數 [來自numpy.polyfited。 ] 最高階的最后一個,這很容易被忽略,並且與例如numpy.polynomial.polynomial.polyfit()不一致。

稍后

首先具有零度系數,如numpy.polynomial.polynomial.polyfit中所做的那樣肯定更合乎邏輯。 我的印象是numpy.polyfit偏離這一點的唯一原因是歷史事故,當然現在幾乎不可能糾正,因為許多程序可能依賴於這種行為。 也許最簡單的解決方案是將人們指向numpy.polyfit中的“首選”解決方案?

從較早的評論中可以明顯看出,“歷史事故”是MATLAB 的polyfit的行為,它首先需要高階。 早期的 numpy 保留了這個令人困惑的約定(它甚至可能繼承自該項目的前身),但后來numpy.polynomial.polynomial.polyfit被實現為 Do It Right™。 關鍵的區別在於(與 MATLAB 不同)python 使用基於 0 的索引,在這種情況下,首先具有零階是非常自然的。 有了這個約定,項目k對應於術語x**k有一個美麗的屬性。

然后在今年的另一期中有一個更新的帳戶,試圖給出一個更連貫的畫面。 引用該問題的歷史回憶:

歷史

(不一定按時間順序)

  1. 某個基於 JVM 的線性代數 package 有一個 function, polyfit ,用於擬合多項式,這做出了一些奇怪的設計選擇,比如首先返回最高階的系數。
  2. numpy,為了支持來自上述環境的逃犯,創建了 function numpy.polyfit ,它模仿了該設計選擇
  3. numpy 實施numpy.ma.polyfit用於掩蔽 arrays,使用numpy.polyfit
  4. 為了糾正歷史的錯誤,numpy 創建了 function numpy.polynomial.polynomial.polyfit ,而不是更安靜地使用具有幾乎完全相同簽名的人們更安靜的 sensible 系數。
  5. 人們對這兩個非常相似的功能感到困惑( #7478 ); 新的 function 也無法返回協方差矩陣,並且它沒有對應的掩碼數組
  6. Powering on towards both API nirvana and worn-out keyboards, numpy introduced the numpy.polynomial.polynomial.Polynomial class, and documented in numpy.polyfit that that was the preferred way of fitting polynomials, although that also had no masked implementation and also did不返回協方差矩陣

開發人員對這兩個問題的回應清楚地表明numpy.polyfit是技術債務,並且正如其文檔所述,新代碼應使用Polynomial class。 自 2016 年以來,文檔有了很大改進,現在有從numpy.polyfitPolynomial的指針,但仍有很多歧義。 理想情況下,這兩種polyfit方法都應該解釋它們相對於另一種的情況,並將用戶指向Polynomial class 作為編寫新代碼的一種明顯方式。

暫無
暫無

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

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