You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何numpy.polynomial.Polynomial.fit()拟合结果与其他方法不同?

Numpy多项式拟合结果不一致的原因

问题描述

使用Numpy的多项式拟合方法时,三种方式的结果存在差异,仅numpy.polynomial.polynomial.Polynomial.fit()的输出和另外两种不同。测试代码及输出如下:

import numpy as np

x = [0.0, 0.44721, 0.94868, 1.3784, 2.21359]
y = [100.0, 99.77908, 97.99978, 95.56167, 88.42727]

coef00, coef11 = np.polynomial.polynomial.Polynomial.fit(x, y, 1)
coef_0, coef_1 = np.polynomial.polynomial.polyfit(x, y, 1)
coef1, coef0 = np.polyfit(x, y, 1)

print(coef00, coef11)
print(coef_0, coef_1)
print(coef0, coef1)

输出结果:

95.77300574959435 -5.883175469265392
101.65618121885973 -5.315506005416914
101.65618121885977 -5.315506005416928

核心原因

Polynomial.fit()与另外两个函数的关键差异在于自动对输入x做了标准化处理:

  • np.polyfit()和np.polynomial.polynomial.polyfit()直接基于原始x值执行最小二乘拟合,返回的是原始变量空间下的多项式系数(低次到高次顺序)。
  • Polynomial.fit()默认会将x标准化到[-1, 1]区间,以此提升数值稳定性,返回的系数对应标准化后的x变量,而非原始x的系数。

统一结果的方法

如果需要让Polynomial.fit()返回与另外两个函数一致的结果,只需关闭标准化,指定domain参数为x的实际取值范围:

coef00, coef11 = np.polynomial.polynomial.Polynomial.fit(x, y, 1, domain=[min(x), max(x)])

此时得到的系数会和polyfit的结果完全匹配。

额外注意:系数顺序

  • np.polynomial模块下的函数(Polynomial.fit()、polyfit())返回系数为低次到高次,即先常数项,再一次项。
  • np.polyfit()返回系数为高次到低次,即先一次项,再常数项,这也是代码中coef1, coef0顺序的原因。

内容的提问来源于stack exchange,提问作者LinuxPenguin99

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 12:11:26