我应该使用 numpy.polyfit 还是 numpy.polynomial.polyfit 或 numpy.polynomial.polynomial.Polynomial?

Mak*_*e42 5 python numpy polynomials

之间有什么区别

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

什么是正确的选择?

(奖励:当我想做的第一件事是适应我的数据时,我将如何使用该类?)

And*_*eak 6

据我所知,这里有很多遗留包袱,我们不应该使用numpy.polyfit,我们应该更喜欢numpy.polynomial.polynomial.Polynomial.fit

\n\n

考虑2016 年对此 github 问题的评论

\n\n
\n

虽然文档相当清楚地指出系数是从numpy.polyfit\xe2\x80\x94 ed 返回的。] 最高阶最后一个,这很容易被忽略,并且与例如不一致numpy.polynomial.polynomial.polyfit()

\n
\n\n

稍后

\n\n
\n

首先获得零次系数,正如在中所做的那样,numpy.polynomial.polynomial.polyfit绝对更符合逻辑。我的印象是,numpy.polyfit偏离这一点的唯一原因是历史事故,这当然现在几乎不可能纠正,因为许多程序可能依赖于这种行为。也许最简单的解决方案是向人们指出“首选”解决方案numpy.polyfit

\n
\n\n

从之前的评论可以明显看出,“历史事故”是MATLABpolyfit首先执行高指令的行为。早期的 numpy 保留了这种令人困惑的约定(它甚至可能继承自该项目的前身),但后来numpy.polynomial.polynomial.polyfit被实现为 Do It Right\xe2\x84\xa2。关键的区别在于(与 MATLAB 不同)Python 使用基于 0 的索引,在这种情况下,首先使用零阶是非常自然的。k有了这个约定,就有了 item对应于该术语的美丽属性x**k

\n\n

然后今年的另一期有一个较新的帐户,试图提供更连贯的画面。引用该问题的历史回忆:

\n\n
\n

历史

\n\n

(不一定按时间顺序)

\n\n
    \n
  1. 某个基于 JVM 的线性代数包有一个函数 ,polyfit用于拟合多项式,该函数做出了一些奇怪的设计选择,例如首先返回最高次的系数。
  2. \n
  3. numpy 为了支持上述环境中的逃亡者,创建了numpy.polyfit模仿该设计选择的函数
  4. \n
  5. numpy.ma.polyfitnumpy为屏蔽数组实现,使用numpy.polyfit
  6. \n
  7. 为了修复历史错误,numpy 创建了numpy.polynomial.polynomial.polyfit具有几乎完全相同的签名的函数,但具有更合理的系数排序,并且悄悄地更喜欢人们使用它
  8. \n
  9. 人们对这两个非常相似的功能感到困惑(#7478);新函数也无法返回协方差矩阵,并且它没有\n 对应的掩码数组
  10. \n
  11. 为实现 API 必杀技和破旧的键盘,numpy 引入了该类numpy.polynomial.polynomial.Polynomial,并记录了numpy.polyfit这是拟合多项式的首选方式,尽管它也没有屏蔽实现并且也没有返回协方差矩阵
  12. \n
\n
\n\n

开发人员对这两个问题的回应清楚地表明这numpy.polyfit是技术债务,正如其文档所说,新代码应该使用该类Polynomial。自 2016 年以来,文档已经有了很大改进,现在有了从numpy.polyfit到 的指针Polynomial,但仍然存在很多歧义。理想情况下,两种polyfit方法都应该解释它们相对于另一种方法的情况,并引导用户将类Polynomial作为编写新代码的一种明显方法。

\n