Python 我应该使用numpy.polyfit还是numpy.polyfit.polyfit或numpy.polymonic.polymonic.polymonic?

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.linalg.linalg.lstsq,但在其他方面有所不同

numpy.polyfit的文档也建议使用

什么是正确的选择


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

从我可以看出,这里有很多遗留问题,我们不应该使用
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
    关键字,您将看到两个结果都会改变并保持相等,因此权重确实会影响结果。这是骗局