Python基于numpy拟合趋势线如何获取指定区间的外推值列表
解决方法
你已经通过np.polyfit得到了一阶拟合多项式对象f,它本身支持向量化计算,直接传入你需要的区间内的x值序列,就能批量得到对应外推结果。
操作步骤如下:
- 第一步:生成指定区间的x值序列
如果你需要x从1000到1050、步长为1的整数序列,用np.arange即可,注意np.arange是左闭右开区间,所以结束值要设为1051才能包含1050:
如果需要自定义采样点数(比如1000到1050之间取20个均匀分布的点),可以用x_extrap = np.arange(1000, 1051, step=1)np.linspace:x_extrap = np.linspace(1000, 1050, num=20) - 第二步:计算对应外推y值
直接把生成的x序列传给f,就能得到numpy数组格式的外推结果:
如果需要转成Python原生列表供后续操作,调用y_extrap_array = f(x_extrap)tolist()方法即可:y_extrap_list = y_extrap_array.tolist()
完整修改后代码示例:
import numpy as np import matplotlib.pyplot as plt y = np.array([13.6700,14.4900]) x = np.array([992,1000]) # 拟合一阶多项式 p = np.polyfit(x, y, 1) f = np.poly1d(p) # ========== 获取1000到1050的外推值 ========== # 生成1000~1050步长为1的x序列 x_extrap = np.arange(1000, 1051, step=1) # 计算对应外推y值(numpy数组格式) y_extrap_array = f(x_extrap) # 转成Python原生列表 y_extrap_list = y_extrap_array.tolist() # 可打印查看结果 print("外推x序列:", x_extrap) print("外推y值(数组):", y_extrap_array) print("外推y值(列表):", y_extrap_list) # 原有绘图逻辑 x2=np.array([1001,1010]) plt.plot(x, y, 'bo', label="Data") plt.plot(x,f(x), 'r:',label="Polyfit") plt.plot(x2,f(x2), 'b-',label="Polyfit") plt.legend() plt.show()
如果你的x区间不需要连续采样,而是指定几个离散的x值,直接把这些值放到numpy数组里传给f即可,比如f(np.array([1000, 1020, 1050]))就会直接返回这三个点对应的外推值。
内容的提问来源于stack exchange,提问作者Dave Richards
相关产品推荐
相关产品推荐

