Scipy 中级教程——插值和拟合

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
实时数仓Hologres,5000CU*H 100GB 3个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
简介: Scipy 中级教程——插值和拟合【1月更文挑战第7篇】

Python Scipy 中级教程:插值和拟合

Scipy 提供了丰富的插值和拟合工具,用于处理实验数据、平滑曲线、构建插值函数等。在本篇博客中,我们将深入介绍 Scipy 中的插值和拟合功能,并通过实例演示如何应用这些工具。

1. 插值

插值是通过已知的数据点推断在这些数据点之间的值。Scipy 提供了多种插值方法,其中最常用的是 scipy.interpolate 模块中的 interp1d 函数。

import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import interp1d

# 生成原始数据
x = np.linspace(0, 10, 10)
y = np.sin(x)

# 创建插值函数
interp_func = interp1d(x, y, kind='linear')

# 生成更密集的 x 值
x_interp = np.linspace(0, 10, 100)

# 使用插值函数计算对应的 y 值
y_interp = interp_func(x_interp)

# 绘制原始数据和插值结果
plt.scatter(x, y, label='原始数据')
plt.plot(x_interp, y_interp, label='插值结果', color='red')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.show()

在这个例子中,我们使用线性插值(kind='linear')插值了一组原始数据。插值函数 interp_func 可以在新的 x 值上计算对应的 y 值。

2. 样条插值

除了线性插值,样条插值是一种常用的插值方法。Scipy 提供了 scipy.interpolate 模块中的 UnivariateSpline 类来实现样条插值。

from scipy.interpolate import UnivariateSpline

# 创建样条插值函数
spline_func = UnivariateSpline(x, y, s=0)

# 计算对应的 y 值
y_spline = spline_func(x_interp)

# 绘制原始数据和样条插值结果
plt.scatter(x, y, label='原始数据')
plt.plot(x_interp, y_spline, label='样条插值结果', color='green')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.show()

在这个例子中,我们使用样条插值创建了 spline_func 函数,并在新的 x 值上计算了对应的 y 值。

3. 多项式拟合

多项式拟合是通过一个多项式来逼近一组数据点。Scipy 提供了 numpy.polyfit 函数来实现多项式拟合。

# 生成原始数据
x = np.linspace(0, 10, 10)
y = 2*x**2 + 3*x + 1 + 2*np.random.normal(size=len(x))

# 多项式拟合
coefficients = np.polyfit(x, y, deg=2)

# 生成更密集的 x 值
x_fit = np.linspace(0, 10, 100)

# 计算对应的 y 值
y_fit = np.polyval(coefficients, x_fit)

# 绘制原始数据和拟合结果
plt.scatter(x, y, label='原始数据')
plt.plot(x_fit, y_fit, label='多项式拟合结果', color='purple')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.show()

在这个例子中,我们生成了一个二次多项式的原始数据,然后使用 np.polyfit 函数拟合了一个二次多项式,最后计算了在新的 x 值上对应的 y 值。

4. 非线性最小二乘拟合

对于更一般的拟合问题,Scipy 提供了 scipy.optimize.curve_fit 函数来进行非线性最小二乘拟合。

from scipy.optimize import curve_fit

# 定义目标函数
def target_function(x, a, b, c):
    return a * np.exp(b * x) + c

# 生成原始数据
x = np.linspace(0, 5, 50)
y = target_function(x, 2.5, 1.3, 0.5) + 0.2 * np.random.normal(size=len(x))

# 非线性最小二乘拟合
params, covariance = curve_fit(target_function, x, y)

# 输出拟合参数
a_fit, b_fit, c_fit = params
print("拟合参数 a:", a_fit)
print("拟合参数 b:", b_fit)
print("拟合参数 c:", c_fit)

# 计算对应的 y 值
y_fit = target_function(x, a_fit, b_fit, c_fit)

# 绘制原始数据和拟合结果
plt.scatter(x, y, label='原始数据')
plt.plot(x, y_fit, label='非线性最小二乘拟合结果', color='orange')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.show()

在这个例子中,target_function 是我们要拟合的目标函数。curve_fit 函数会返回拟合参数。

5. 总结

通过本篇博客的介绍,你可以更好地理解和使用 Scipy 中的插值和拟合工具。这些功能在处理实验数据、平滑曲线以及构建数学模型等方面具有广泛的应用。根据实际问题的性质,选择适当的插值或拟合方法将有助于提高数据分析的准确性和可靠性。希望这篇博客对你有所帮助!

目录
相关文章
|
1月前
|
JSON 数据可视化 API
Python 中调用 DeepSeek-R1 API的方法介绍,图文教程
本教程详细介绍了如何使用 Python 调用 DeepSeek 的 R1 大模型 API,适合编程新手。首先登录 DeepSeek 控制台获取 API Key,安装 Python 和 requests 库后,编写基础调用代码并运行。文末包含常见问题解答和更简单的可视化调用方法,建议收藏备用。 原文链接:[如何使用 Python 调用 DeepSeek-R1 API?](https://apifox.com/apiskills/how-to-call-the-deepseek-r1-api-using-python/)
|
13天前
|
机器学习/深度学习 数据采集 数据可视化
Python/Anaconda双方案加持!Jupyter Notebook全平台下载教程来袭
Jupyter Notebook 是一款交互式编程与数据科学分析工具,支持40多种编程语言,广泛应用于机器学习、数据清洗和学术研究。其核心优势包括实时执行代码片段、支持Markdown文档与LaTeX公式混排,并可导出HTML/PDF/幻灯片等格式。本文详细介绍了Jupyter Notebook的软件定位、特性、安装方案(Anaconda集成环境与原生Python+PIP安装)、首次运行配置及常见问题解决方案,帮助用户快速上手并高效使用该工具。
|
18天前
|
SQL 关系型数据库 MySQL
milvus-use教程 python
本项目参考vanna项目,获取数据库元数据和问题SQL对,存入Milvus向量数据库,并进行相似性检索。采用m3e-large嵌入模型,通过DatabaseManager类实现数据库连接持久化,MilvusVectorStore类封装了Milvus操作方法,如创建集合、添加数据和查询。项目提供init_collections、delete_collections等文件用于初始化、删除和管理集合。所用Milvus版本较新,API与vanna项目不兼容。 [项目地址](https://gitee.com/alpbeta/milvus-use)
101 9
|
25天前
|
大数据 开发者 C++
Python语法糖详解教程
《Python语法糖详解教程》介绍了编程语言中的“语法糖”,即通过特殊语法形式简化代码,使代码更简洁、易读和高效。文章详细解析了列表推导式、字典推导式、元组解包、条件表达式、with语句和装饰器等核心语法糖,并提供了具体示例和最佳实践指南。通过这些技巧,开发者可以在保持底层功能不变的前提下,显著提升开发效率和代码质量。
46 8
|
2月前
|
IDE 测试技术 项目管理
【新手必看】PyCharm2025 免费下载安装配置教程+Python环境搭建、图文并茂全副武装学起来才嗖嗖的快,绝对最详细!
PyCharm是由JetBrains开发的Python集成开发环境(IDE),专为Python开发者设计,支持Web开发、调试、语法高亮、项目管理、代码跳转、智能提示、自动完成、单元测试和版本控制等功能。它有专业版、教育版和社区版三个版本,其中社区版免费且适合个人和小型团队使用,包含基本的Python开发功能。安装PyCharm前需先安装Python解释器,并配置环境变量。通过简单的步骤即可在PyCharm中创建并运行Python项目,如输出“Hello World”。
543 13
【新手必看】PyCharm2025 免费下载安装配置教程+Python环境搭建、图文并茂全副武装学起来才嗖嗖的快,绝对最详细!
|
27天前
|
C语言 Python
Python学习:内建属性、内建函数的教程
本文介绍了Python中的内建属性和内建函数。内建属性包括`__init__`、`__new__`、`__class__`等,通过`dir()`函数可以查看类的所有内建属性。内建函数如`range`、`map`、`filter`、`reduce`和`sorted`等,分别用于生成序列、映射操作、过滤操作、累积计算和排序。其中,`reduce`在Python 3中需从`functools`模块导入。示例代码展示了这些特性和函数的具体用法及注意事项。
|
3月前
|
数据可视化 DataX Python
Seaborn 教程-绘图函数
Seaborn 教程-绘图函数
113 8
|
3月前
Seaborn 教程-主题(Theme)
Seaborn 教程-主题(Theme)
178 7
|
3月前
|
Python
Seaborn 教程-模板(Context)
Seaborn 教程-模板(Context)
65 4
|
3月前
|
数据可视化 Python
Seaborn 教程
Seaborn 教程
74 5