Python 我应该使用numpy.polyfit还是numpy.polyfit.polyfit或numpy.polymonic.polymonic.polymonic?
两者的区别是什么 及 什么时候我应该用哪一个 我检查了代码,但是两者都在代码中使用numpy.linalg.linalg.lstsq,但在其他方面有所不同 numpy.polyfit的文档也建议使用 什么是正确的选择Python 我应该使用numpy.polyfit还是numpy.polyfit.polyfit或numpy.polymonic.polymonic.polymonic?,python,numpy,polynomials,Python,Numpy,Polynomials,两者的区别是什么 及 什么时候我应该用哪一个 我检查了代码,但是两者都在代码中使用numpy.linalg.linalg.lstsq,但在其他方面有所不同 numpy.polyfit的文档也建议使用 什么是正确的选择 (奖励:当我想做的第一件事就是适应我的数据时,我将如何使用该类?从我可以看出,这里有很多遗留问题,我们不应该使用numpy.polyfit,我们应该更喜欢它 考虑: 虽然文档相当清楚地指出,系数是[从numpy.polyfit-ed.]返回的,并且是最后一个最高阶的,但这很容
(奖励:当我想做的第一件事就是适应我的数据时,我将如何使用该类?从我可以看出,这里有很多遗留问题,我们不应该使用
numpy.polyfit
,我们应该更喜欢它
考虑:
虽然文档相当清楚地指出,系数是[从numpy.polyfit
-ed.]返回的,并且是最后一个最高阶的,但这很容易被忽略,并且与numpy.polynomy.polynomy.polyfit()不一致
过一会儿
首先使用零次系数,如numpy.polynomy.polynomy.polyfit
中所做的那样,显然更符合逻辑。我的印象是,numpy.polyfit背离这一点的唯一原因是历史事故,当然,现在几乎不可能纠正,因为许多节目可能依赖于这种行为。也许最简单的解决方案是在numpy.polyfit
中向人们指出“首选”解决方案
从早些时候的评论中可以明显看出,“历史性事故”是指那些首先受到高度重视的人的行为。早期的numpy保留了这个令人困惑的惯例(它甚至可能从项目的前身继承下来),但后来实现了numpy.polynomy.polynomy.polyfit
™. 关键的区别在于(与MATLAB不同)python使用基于0的索引,在这种情况下,首先使用零阶是非常自然的。按照这种约定,项k
对应于术语x**k
,这是一个很好的特性
然后有一个新的描述,试图给出一个更连贯的画面。引用这一问题的历史回忆:
历史
(不一定按时间顺序)
某个基于JVM的线性代数软件包有一个函数,polyfit
,用于拟合多项式,该函数做出了一些奇怪的设计选择,
比如首先返回系数的最高阶
numpy为了支持上述环境中的逃犯,创建了函数numpy.polyfit
,模仿了该设计选择
使用numpy.polyfit
为了修复历史上的错误,numpy创建了函数numpy.polynomy.polynomy.polyfit
,几乎与
相同的签名,但具有更合理的系数顺序,以及
我宁愿人们用它来代替
人们被这两个非常相似的函数()弄糊涂了;此外,新函数无法返回协方差矩阵,它确实返回了协方差矩阵
没有掩码数组对应项
numpy向API nirvana和破旧的键盘供电,引入了numpy.polynomy.polynomy.polynomy
类,并
记录在numpy.polyfit
中,这是首选的安装方式
多项式,尽管它也没有屏蔽实现,而且
没有返回协方差矩阵
开发人员对这两个问题的回答清楚地表明,numpy.polyfit
是技术债务,正如其文档所述,新代码应该使用多项式
类。自2016年以来,文档有了很大的改进,现在有了从numpy.polyfit
到polymone
的指针,但仍然存在很多歧义。理想情况下,两种polyfit
方法都应该解释它们相对于另一种方法的情况,并将用户指向多项式
类作为编写新代码的一种明显方式。还有一个非常奇怪的区别:np.polyfit中的权重仅应用于y值(最小二乘法的右侧),而在np.Polynomy.Polynomy.Polynomy拟合应用于整个点(x_i,y_i)(最小二乘法的左侧和右侧)。我不明白np.polyfit的方法的意义是什么。。。你能评论一下吗?@Make42你确定这是一个实际的区别,而不仅仅是措辞上的区别吗?后来的np.polynomy.polynomy.polyfit
说“理想情况下,选择权重,使乘积w[i]*y[i]的误差都具有相同的方差。”算法说“这个问题是通过建立(通常)超定矩阵方程来解决的:V(x)*c=w*y
”,因此,权重乘以y
分量。我认为唯一有意义的事情是对点进行加权,这恰好是通过乘以y
组件来实现的。一些例子有功能上的不同吗?我检查了代码,所以是的,我或多或少有把握。正如我所写的:在np.polynomy.polynomy.polyfit
中,我们将权重乘以两边(包括y)。我的观点是,在np.polyfit
中,我们只在y边相乘。“我认为唯一有意义的事情是衡量分数”-我同意,这就是为什么我认为np.polyfit
的行为很奇怪的原因。请检查代码以确认(或反驳)。@Make42我生成了随机多项式和拟合多项式,这两种方法都带有权重。结果是相同的(不完全相同,但已知两者使用不同的算法)。这表明它们实现了相同的拟合,只是其中一个在数值上比另一个更稳定。如果删除给定输入点集的w
关键字,您将看到两个结果都会改变并保持相等,因此权重确实会影响结果。这是骗局