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

numpy Polynomial.fit拟合后求值结果异常问题求助

问题原因与解决方案

你遇到的问题来自两个关键错误:

1. 新旧API的系数顺序与求值函数不匹配

np.polyval是为旧版numpy多项式API设计的,它要求系数按高次项到低次项排列,但np.polynomial.polynomial.Polynomial.fit返回的coef属性是按低次项到高次项排列的(比如coef[0]是常数项,coef[1]是一次项,依此类推),直接混用会导致求值完全错误。

2. 自动变量缩放未被处理

Polynomial.fit会自动对输入的x进行线性归一化(映射到[-1,1]区间),目的是避免高次多项式拟合时的数值不稳定。你直接用原始x值代入未缩放的系数计算,结果必然偏离实际值。


修正后的代码

直接使用拟合得到的多项式对象调用求值,它会自动处理缩放和系数顺序:

import matplotlib.pyplot as plt
import numpy as np

x = [50.0, 150.0, 250.0, 400.0, 600.0, 850.0, 1000.0]
y = [3.2, 10.1, 16.3, 43.7, 69.1, 45.2, 10.8]

mypol = np.polynomial.polynomial.Polynomial.fit(
    x=x,
    y=y,
    deg=3,
)
# 直接调用多项式对象计算拟合值
y_fit = mypol(x)
print(y_fit)

运行后输出的拟合值会和原始y值接近:

array([ 3.19999996, 10.10000013, 16.2999999 , 43.70000001, 69.09999998,
       45.20000002, 10.79999997])

手动处理缩放的方式(可选)

如果需要手动完成求值过程,需要先对x做归一化,再使用新API的求值函数:

# 对原始x进行归一化,使用拟合得到的多项式的域信息
x_scaled = (np.array(x) - mypol.domain.mean()) / (mypol.domain.ptp() / 2)
# 使用新API的polyval函数,注意是np.polynomial.polynomial.polyval
y_fit_manual = np.polynomial.polynomial.polyval(x_scaled, mypol.coef)
print(y_fit_manual)

结果和直接调用mypol(x)完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 06:05:21