Python实现样条插值:线性与三次拟合详解

拾柒
拾柒
发布时间:2026-10-12| 1人浏览过
原创

本文介绍如何使用Python的scipy库进行样条插值。通过读取CSV数据,利用splrep生成参数,并使用splev计算插值结果。代码演示了线性(k=1)与三次(k=3)样条的实现,并包含使用matplotlib进行可视化对比的完整步骤。

环境配置与数据准备

在进行样条插值前,需导入必要的库并配置绘图环境。使用 matplotlib 时,建议设置中文字体以正常显示标签,并关闭Unicode负号显示以避免乱码。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
 
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来显示负号

接着,从CSV文件读取数据。假设数据文件名为 data1.csv,编码为 gbk。提取索引作为X轴数据点,提取特定列(如'沪深300')的值作为Y轴数据点。同时,定义一组密集的观测点 x,用于生成平滑的插值曲线。

#导入数据
data1=pd.read_csv('data1.csv',encoding='gbk')
 
#数据准备
X=data1.index #定义数据点
Y=data1['沪深300'].values #定义数据点
x=np.arange(0,len(data1),0.15) #定义观测点

样条插值实现

使用 scipy.interpolate 模块进行插值计算。该模块提供了 splrep 和 splev 两个核心函数:

  • splrep(X, Y, k):根据源数据点 X 和 Y 生成样条参数,k 指定样条阶数(1为线性,3为三次)。
  • splev(x, tck):根据观测点 x 和生成的样条参数 tck 计算插值结果。

线性样条插值

设置阶数 k=1 进行线性插值:

#进行一阶样条差值
ipo1=spi.splrep(X,Y,k=1) #源数据点导入,生成参数
iy1=spi.splev(x,ipo1) #根据观测点和样条参数,生成插值

三次样条拟合

设置阶数 k=3 进行三次样条拟合,通常能提供更平滑的曲线:

#进行三次样条拟合
ipo3=spi.splrep(X,Y,k=3) #源数据点导入,生成参数
iy3=spi.splev(x,ipo3) #根据观测点和样条参数,生成插值

结果可视化

使用 matplotlib 创建子图,分别展示原始数据、线性插值结果和三次样条插值结果。通过设置Y轴范围、标签、标题和图例,使图表清晰易读。

##作图
fig,(ax1,ax2)=plt.subplots(2,1,figsize=(10,12))
ax1.plot(X,Y,label='沪深300')
ax1.plot(x,iy1,'r.',label='插值点')
ax1.set_ylim(Y.min()-10,Y.max()+10)
ax1.set_ylabel('指数')
ax1.set_title('线性插值')
ax1.legend()
ax2.plot(X,Y,label='沪深300')
ax2.plot(x,iy3,'b.',label='插值点')
ax2.set_ylim(Y.min()-10,Y.max()+10)
ax2.set_ylabel('指数')
ax2.set_title('三次样条插值')
ax2.legend()

以上就是Python样条插值实现的详细内容,更多关于Python数据处理与可视化的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。