三次样条插值法Python实现(附Python代码)

准备环境:

    软件:PyCharm    

    模块:

        pandas,用于读取Excel数据并将数据转换为NumPy数组

        numpy,用于数值计算

        scipy,用于执行三次样条插值函数(CubicSpline)

        matplotlib,用于绘制图像

    数据要求:

        x序列须自增,a列为x列,b列为y列,且x和y序列须经过数据预处理。

        首先正确导入数据,并将数据转换为NumPy数组:

# 导入Excel数据
df = pd.read_excel('data.xlsx')

# 假设A列是x,B列是y
x = df.iloc[:, 0].values  # 获取A列数据并转换为NumPy数组
y = df.iloc[:, 1].values  # 获取B列数据并转换为NumPy数组
 

然后我们可以检查一下数据的有效性(并做处理),避免在运行代码时出现错误:

# 检查x和y中的非有限值
if not np.all(np.isfinite(x)):
    print("x 数组中存在非有限值")
    x = x[np.isfinite(x)]  # 去除非有限值
    y = y[np.isfinite(x)]  # 同时去除对应的y值

if not np.all(np.isfinite(y)):
    print("y 数组中存在非有限值")
    x = x[np.isfinite(y)]  # 去除对应的x值
    y = y[np.isfinite(y)]  # 去除非有限的y值

三次样条函数插值:

cs = CubicSpline(x, y)

绘制图像:

# 绘制原始数据点
plt.scatter(x, y, color='red', label='Original Data')

# 绘制插值结果
plt.plot(x_interp, y_interp, label='Cubic Spline')

plt.legend()
plt.show()

最后结果:

图片

注:插值时不包含列名!

最后,完整代码如下:

import pandas as pd
import numpy as np
from scipy.interpolate import CubicSpline
import matplotlib.pyplot as plt

# 导入Excel数据
df = pd.read_excel('data.xlsx')

# 假设A列是x,B列是y
x = df.iloc[:, 0].values  # 获取A列数据并转换为NumPy数组
y = df.iloc[:, 1].values  # 获取B列数据并转换为NumPy数组

# 检查x和y中的非有限值
if not np.all(np.isfinite(x)):
    print("x 数组中存在非有限值")
    x = x[np.isfinite(x)]  # 去除非有限值
    y = y[np.isfinite(x)]  # 同时去除对应的y值

if not np.all(np.isfinite(y)):
    print("y 数组中存在非有限值")
    x = x[np.isfinite(y)]  # 去除对应的x值
    y = y[np.isfinite(y)]  # 去除非有限的y值

# 目标插值点
x_interp = np.linspace(min(x), max(x), 100)

# 执行三次样条插值
cs = CubicSpline(x, y)
y_interp = cs(x_interp)

# 绘制原始数据点
plt.scatter(x, y, color='red', label='Original Data')

# 绘制插值结果
plt.plot(x_interp, y_interp, label='Cubic Spline')

plt.legend()
plt.show()

        我是阿杰,一名正在努力学习编程的在校大学生,如果你喜欢我的内容,或者有帮助到你,请点赞鼓励支持一下吧!

        更多技术与交流请关注微信公众号:阿杰技术栈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值