[英]numpy.polyfit vs numpy.polynomial.polynomial.polyfit
[英]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
。
雖然文檔相當清楚地指出返回的系數 [來自
numpy.polyfit
— ed。 ] 最高階的最后一個,這很容易被忽略,並且與例如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
有一個美麗的屬性。
然后在今年的另一期中有一個更新的帳戶,試圖給出一個更連貫的畫面。 引用該問題的歷史回憶:
歷史
(不一定按時間順序)
- 某個基於 JVM 的線性代數 package 有一個 function,
polyfit
,用於擬合多項式,這做出了一些奇怪的設計選擇,比如首先返回最高階的系數。- numpy,為了支持來自上述環境的逃犯,創建了 function
numpy.polyfit
,它模仿了該設計選擇- numpy 實施
numpy.ma.polyfit
用於掩蔽 arrays,使用numpy.polyfit
- 為了糾正歷史的錯誤,numpy 創建了 function
numpy.polynomial.polynomial.polyfit
,而不是更安靜地使用具有幾乎完全相同簽名的人們更安靜的 sensible 系數。- 人們對這兩個非常相似的功能感到困惑( #7478 ); 新的 function 也無法返回協方差矩陣,並且它沒有對應的掩碼數組
- Powering on towards both API nirvana and worn-out keyboards, numpy introduced the
numpy.polynomial.polynomial.Polynomial
class, and documented innumpy.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.polyfit
到Polynomial
的指針,但仍有很多歧義。 理想情況下,這兩種polyfit
方法都應該解釋它們相對於另一種的情況,並將用戶指向Polynomial
class 作為編寫新代碼的一種明顯方式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.