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

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 中的插值和拟合工具。这些功能在处理实验数据、平滑曲线以及构建数学模型等方面具有广泛的应用。根据实际问题的性质,选择适当的插值或拟合方法将有助于提高数据分析的准确性和可靠性。希望这篇博客对你有所帮助!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/624129.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

可视可交互!在全志H618上用OpenCV读取图像显示到PyQt5窗口上

OpenCV能够处理图像、视频、深度图像等各种类型的视觉数据,在某些情况下,尽管OpenCV可以显示窗口,但PyQt5可能更适合用于创建复杂的交互式应用程序,而自带GPU的H618就成为了这些图像显示的最佳载体。 这里分享一个代码&#xff0…

C语言—文件

C中文件可分为文本文件和二进制文件。 文件指针和FILE 类型 在C语言中,FILE 类型是一个用于表示文件流的结构体类型。这个结构体在标准I/O(输入/输出)库中定义,尽管其确切的内部结构对程序员是隐藏的,也可能因不同的…

高精度PWM脉宽调制信号转模拟信号隔离变送器1Hz~10KHz转0-5V/0-10V/1-5V,0-10mA/0-20mA/4-20mA

主要特性: >>精度等级:0.1级。产品出厂前已检验校正,用户可以直接使用 >>辅助电源:8-32V 宽范围供电 >>PWM脉宽调制信号输入: 1Hz~10KHz >>输出标准信号:0-5V/0-10V/1-5V,0-10mA/0-20mA/4-20mA等&…

云联接:揭开SD-WAN神秘面纱,颠覆你对网络的认知!

云联接(Cloud Connect)源于软件定义广域网(SD-WAN)。 软件定义广域网由于技术应用性强,近年来从一个由软件定义网络(SDN)部分衍生的分支概念发展为大规模普适的实践技术,已成为建立…

Detection-friendly dehazing: object detection in real-world hazy scenes

Detection-friendly dehazing: object detection in real-world hazy scenes 摘要 提出了一种联合架构BAD-Net,将去雾模块和检测模块连接成一个端到端的方法。另外,设计了了两个分支结构,用注意力融合模块来充分结合有雾和去雾特征&#xf…

bilibi分类id的秘密

问题 今天想通过rss来阅读bilibili的相关信息,但是如何获取排行榜的分类呢?研究了一下。 办法 浏览器最喜欢的F12,过滤关键才v2?rid,后面的数字就是分类id。 rss获取路径 [最后的数字是0,是所有投稿,数字是1的话是…

陪诊小程序开发|陪诊软件定制|陪诊系统成品功能包含哪些?

陪诊小程序是一种便捷的工具,为用户提供一系列服务和功能,方便患者在就医过程中获得更好的体验和效果。接下来我们将介绍几个主要的陪诊小程序功能。 陪诊小程序开发功能: 一、预约挂号功能。陪诊小程序能够连接用户和医疗机构的系统&#x…

10万字200道软件测试经典面试总结(附答案)

🍅 视频学习:文末有免费的配套视频可观看 🍅 关注公众号【互联网杂货铺】,回复 1 ,获取《110万字200道软件测试经典面试总结(附答案)》pdf,背题更方便,一文在手&#xff…

python系列28:fastapi部署应用

1. 介绍与安装 FastAPI 是一个用于构建 API 的现代、快速(高性能)的 web 框架,类似flask,Django,webpy 在部署时可能需要用到下面的库: Uvicorn 或者 Hypercorn负责ASGI 服务器。 Starlette 负责 web 部分…

bean转换(高性能)-Mapstruct

它会在启动时会自动生成同名复制,生成一个临时文件,避免bean拷贝时使用反射带来的性能损害,且字段检查也是在编译时完成的,基本上就是运行时无性能损耗 评语:性能优良功能强大,基本上你能想到的bean/多bean…

df 计算同一列时间差(差分pandas.diff())

df pd.DataFrame({a: [1, 2, 3, 4, 5, 6],b: [1, 1, 2, 3, 5, 8],c: [1, 4, 9, 16, 25, 36]}) df.diff()# 计算某一列差值 df.c.diff(1)https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.diff.html

C语言多线程基础(pthread)

1.线程和进程的概念 线程:进程中的一个实体,是CPU调度和分派的基本单位。可以与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤销另一个线程,同一进程中的多个线程之间可以并发执行,线程在运行中呈现间断…

Python 将列表数据写入文件(txt, csv,excel)

写入txt文件 def text_save(filename, data):#filename为写入txt文件的路径,data为要写入数据列表. file open(filename,a) for i in range(len(data)): s str(data[i]).replace([,).replace(],)#去除[],这两行按数据不同,可以选择 s s.replace(&quo…

NVS入门(基于ESP-IDF)

主要参考资料: B站Up主 孤独的二进制《ESP32 存储篇 NVS 非易失性存储库》 ESP-IDF开发指南>API参考>非易失性存储: https://docs.espressif.com/projects/esp-idf/zh_CN/v5.1/esp32s3/api-reference/storage/nvs_flash.html 目录 概述NVS使用(以W…

一键制作底片效果,让视频复古感倍增!

你是否厌倦了千篇一律的视频效果,想要尝试一些与众不同的视觉体验?是否想要让你的视频散发出一种复古、怀旧的气息?现在,有了我们的底片效果制作工具,这些愿望全部实现 首先第一步,我们要进入视频剪辑高手…

16.Linux基本使用和程序部署

文章目录 1.Linux 背景知识1.1Linux 是什么1.2Linux 发行版1.3关于 Linux 我们学习什么 2.Linux 环境搭建2.1环境搭建方式2.2使用云服务器2.3使用终端软件连接到 Linux2.3.1什么是终端软件2.3.2下载安装 XShell2.3.3使用 XShell 登陆主机 3.Linux 常用命令3.1 ls3.2 pwd3.3 cd3…

关于cdn资源失效的问题,一个月了都解决不了,七牛云技术这么差的吗?

起因 最近登录我的gpt镜像网站后,发现关于面具的图片资源都失效了 CoCo-AI 于是紧急使用 F12 排查原因 发现所有图片拿出来都已经无法访问了。看来是资源出了问题 在网上一番搜索后发现是 cdn.staticfile.org 失效导致的,而该静态资源属于七牛云&#…

用模方做单体化连接草图大师时,不能联动,这个是什么原因?

答:需要2019版本Sketch Up,然后添加好对应的联动插件。 模方是一款针对实景三维模型的冗余碎片、水面残缺、道路不平、标牌破损、纹理拉伸模糊等共性问题研发的实景三维模型修复编辑软件。模方4.1新增自动单体化建模功能,支持一键自动提取房屋…

大数据开发之Hive(查询、分区表和分桶表、函数)

第 6 章:查询 6.1 基本语法及执行顺序 1、查询语句语法 select_expr, select_expr, ... FROM table_reference [WHERE where_condition] [GROUP BY col_list] [ORDER BY col_list] [CLUSTER BY col_list| [DISTRIBUTE BY col_list] [SORT BY col_list]] [LIMIT n…

htmx 只是另一个 JavaScript 框架吗?老外都吵上了

对 htmx 最常见的批评之一通常来自第一次听说它的人,如下所示: 你抱怨现代前端框架的复杂性,但你的解决方案只是另一个复杂的前端框架。 这是一个很好的反对意见!对于你引入到项目中的任何第三方 (3P) 代码,你都有权提…