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
什么是正确的选择?
(奖励:当我想做的第一件事是适应我的数据时,我将如何使用该类?)
据我所知,这里有很多遗留包袱,我们不应该使用numpy.polyfit
,我们应该更喜欢numpy.polynomial.polynomial.Polynomial.fit
。
\n\n\n虽然文档相当清楚地指出系数是从
\nnumpy.polyfit
\xe2\x80\x94 ed 返回的。] 最高阶最后一个,这很容易被忽略,并且与例如不一致numpy.polynomial.polynomial.polyfit()
。
稍后
\n\n\n\n\n首先获得零次系数,正如在中所做的那样,
\nnumpy.polynomial.polynomial.polyfit
绝对更符合逻辑。我的印象是,numpy.polyfit
偏离这一点的唯一原因是历史事故,这当然现在几乎不可能纠正,因为许多程序可能依赖于这种行为。也许最简单的解决方案是向人们指出“首选”解决方案numpy.polyfit
?
从之前的评论可以明显看出,“历史事故”是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
\n- 某个基于 JVM 的线性代数包有一个函数 ,
\npolyfit
用于拟合多项式,该函数做出了一些奇怪的设计选择,例如首先返回最高次的系数。- numpy 为了支持上述环境中的逃亡者,创建了
\nnumpy.polyfit
模仿该设计选择的函数- \n
numpy.ma.polyfit
numpy为屏蔽数组实现,使用numpy.polyfit
- 为了修复历史错误,numpy 创建了
\nnumpy.polynomial.polynomial.polyfit
具有几乎完全相同的签名的函数,但具有更合理的系数排序,并且悄悄地更喜欢人们使用它- 人们对这两个非常相似的功能感到困惑(#7478);新函数也无法返回协方差矩阵,并且它没有\n 对应的掩码数组
\n- 为实现 API 必杀技和破旧的键盘,numpy 引入了该类
\nnumpy.polynomial.polynomial.Polynomial
,并记录了numpy.polyfit
这是拟合多项式的首选方式,尽管它也没有屏蔽实现并且也没有返回协方差矩阵
开发人员对这两个问题的回应清楚地表明这numpy.polyfit
是技术债务,正如其文档所说,新代码应该使用该类Polynomial
。自 2016 年以来,文档已经有了很大改进,现在有了从numpy.polyfit
到 的指针Polynomial
,但仍然存在很多歧义。理想情况下,两种polyfit
方法都应该解释它们相对于另一种方法的情况,并引导用户将类Polynomial
作为编写新代码的一种明显方法。
归档时间: |
|
查看次数: |
1169 次 |
最近记录: |