Python使用分段函数拟合数据

Python使用分段函数拟合数据

  • 前言
  • 前提条件
  • 相关介绍
  • 实验环境
  • 使用分段函数拟合数据
    • 代码实现
    • 输出结果

在这里插入图片描述

前言

  • 由于本人水平有限,难免出现错漏,敬请批评改正。
  • 更多精彩内容,可点击进入Python日常小操作专栏、OpenCV-Python小应用专栏、YOLO系列专栏、自然语言处理专栏或我的个人主页查看
  • YOLOv8 Ultralytics:使用Ultralytics框架训练RT-DETR实时目标检测模型
  • 基于DETR的人脸伪装检测
  • YOLOv7训练自己的数据集(口罩检测)
  • YOLOv8训练自己的数据集(足球检测)
  • YOLOv5:TensorRT加速YOLOv5模型推理
  • YOLOv5:IoU、GIoU、DIoU、CIoU、EIoU
  • 玩转Jetson Nano(五):TensorRT加速YOLOv5目标检测
  • YOLOv5:添加SE、CBAM、CoordAtt、ECA注意力机制
  • YOLOv5:yolov5s.yaml配置文件解读、增加小目标检测层
  • Python将COCO格式实例分割数据集转换为YOLO格式实例分割数据集
  • YOLOv5:使用7.0版本训练自己的实例分割模型(车辆、行人、路标、车道线等实例分割)
  • 使用Kaggle GPU资源免费体验Stable Diffusion开源项目

前提条件

  • 熟悉Python

相关介绍

  • Python是一种跨平台的计算机程序设计语言。是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。
  • PyTorch 是一个深度学习框架,封装好了很多网络和深度学习相关的工具方便我们调用,而不用我们一个个去单独写了。它分为 CPU 和 GPU 版本,其他框架还有 TensorFlow、Caffe 等。PyTorch 是由 Facebook 人工智能研究院(FAIR)基于 Torch 推出的,它是一个基于 Python 的可续计算包,提供两个高级功能:1、具有强大的 GPU 加速的张量计算(如 NumPy);2、构建深度神经网络时的自动微分机制。
  • NumPy(Numerical Python的缩写)是Python语言的一个数值计算库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。NumPy的诞生极大地提升了Python进行科学计算的效率,它提供的多维数组对象和丰富的数学函数库,使得Python可以轻松地进行科学计算和数据分析。
  • NumPy的特点包括:
    • 强大的多维数组对象:NumPy提供了一个高效的多维数组对象,可以进行快速的数据处理和计算。
    • 高效的内存管理:NumPy使用高效的内存管理,可以处理大规模的数据,并最大限度地提高了内存使用效率。
    • 数学函数库:NumPy提供了大量的数学函数库,可以进行各种数学运算和数据处理。
    • 广播机制:NumPy的广播机制使得在处理不同形状的数组时能够自动地进行广播,无需编写额外的循环代码。
    • 支持GPU加速:NumPy支持GPU加速,可以充分利用GPU的计算能力进行大规模的数据处理和计算。
  • 总之,NumPy是Python中进行科学计算和数据分析的重要工具,它提供了高效的多维数组对象和丰富的数学函数库,使得Python可以进行大规模的数据处理和高性能的科学计算。
  • Matplotlib是一个用于创建交互式图形的Python库。它可用于创建各种类型的图形,包括折线图、散点图、柱状图、等高线图、3D图等。Matplotlib的目标是以一种简单而直观的方式创建图形,同时保持对底层图形API的完全控制。这使得Matplotlib非常适合于数据可视化、统计、机器学习等领域。
  • Matplotlib的主要特点包括:
    • 简单易用:Matplotlib的API接口简单直观,易于学习和使用。它提供了丰富的示例代码和文档,使得用户可以快速上手。
    • 高度可定制:Matplotlib的图形是通过一组配置参数来定义的,用户可以根据需要调整图形的样式和布局。此外,Matplotlib还提供了大量的自定义功能,如标签、图例、颜色条等。
    • 支持多种输出格式:Matplotlib支持将图形输出为各种格式,包括PNG、JPEG、SVG、PDF等。这使得用户可以将图形导出为多种媒体格式,并进行交互式展示。
    • 支持实时更新:Matplotlib支持实时更新图形,使得用户可以在运行时动态地更新数据和图形。
    • 支持交互式操作:Matplotlib支持对图形进行交互式操作,如放大、缩小、平移等。这使得用户可以更方便地观察和分析数据。
  • 总之,Matplotlib是一个功能强大的Python图形库,适用于各种类型的数据可视化任务。它简单易用、高度可定制、支持多种输出格式和交互式操作,是Python开发人员常用的数据可视化工具之一。
  • 分段函数是一个数学函数,它在一个区间内可能有不同的表达式。具体来说,分段函数是由一些不连续的线段和常数函数组成的函数。这些线段通常在定义域内不相交,并且在每个线段上,函数的行为都由一个常数函数描述。
  • 分段函数的优点包括:
    • 简化复杂函数关系:分段函数可以将复杂的函数关系拆分成多个简单的部分,使得函数的定义更加清晰和易于理解。
    • 灵活性:分段函数可以根据不同的条件选择不同的算法或表达式来计算函数值,从而使得函数的计算更加灵活和准确。
  • 分段函数的缺点包括:
    • 可读性较差:由于分段函数由多个简单的部分组成,因此可能难以理解其整体行为。
    • 需要更多的维护:与单一的函数相比,分段函数需要更多的维护和更新。
  • 分段函数的特性包括:
    • 分段连续性:在分段函数中,对于任意两个区间,该函数都是连续的。
    • 分段可导性:在分段函数中,可以对每个单独的区间求导,以求出其斜率。
    • 极值特性:在分段函数中,可以找到函数的极大值和极小值,但其极值不一定在函数的每个区间中。
  • 以下是一个分段函数的例子:
    f ( x ) = { 2 x − 1 : x ≤ 3 x 2 − 4 : x > 3 f(x) = \left\{ \begin{array}{lr} 2x - 1 & : x \leq 3 \\ x^2 - 4 & : x > 3 \end{array} \right. f(x)={2x1x24:x3:x>3
  • 这个函数在 x ≤ 3 x \leq 3 x3 的区间内是线性的,而在 x > 3 x > 3 x>3 的区间内是非线性的。分段函数通常用于描述具有不同特征和行为的系统,如控制系统、信号处理等.

实验环境

  • Python 3.x (面向对象的高级语言)

使用分段函数拟合数据

  • 背景:将随机生成的数据,用分段函数拟合。这种方法,在某些场景下,既简单又好用

在这里插入图片描述

代码实现

import numpy as np  
import matplotlib.pyplot as plt  

# 获取区间范围的索引值
def get_x_index_in_interval(x,Intervals):
    for i,(a,b) in enumerate(Intervals):
        if a < x <= b:
            return i
    return 0

# 直线函数
def y_func(x, k, b):
    y = k*x+b
    return y

# 求每个分段区间的函数斜率k和截距b
def line_equation(x1, y1, x2, y2):  
    # 计算斜率  
    k = (y2 - y1) / (x2 - x1)  
    # 计算截距  
    b = y1 - k * x1  
    return k, b

if __name__=="__main__":
    # # 创建数据点  
    # x = np.array([0, 100, 200, 300, 400, 500])  
    # y = np.array([0.0, 5.00, 12.00, 15.00, 20.00, 26.00])

    # 创建10个递增的随机数,输入值
    x = np.random.rand(10) * 100  # 在0到100之间生成随机数 
    x = np.sort(x)  # 对x进行排序,使其成为递增序列  
    
    # 随机生成10个数据点对应的y值,实际值
    y = np.random.rand(10) * 100
    y = np.sort(y)  # 对y进行排序,使其成为递增序列

    # # 使用matplotlib来绘制数据点和拟合的分段直线  
    # plt.scatter(x, y, color='blue', label='Data Points')  # 绘制数据点  
    # # plt.plot(x, y_pre, color='red', label='Fitted Piecewise Line')  # 绘制拟合直线  
    # plt.title('Piecewise Linear Regression')  # 添加标题  
    # plt.xlabel('X')  # 添加x轴标签  
    # plt.ylabel('Y')  # 添加y轴标签  
    # plt.legend()  # 添加图例  
    # plt.show()  # 显示图表  

    # 对应的分段系数 
    k_b = [(line_equation(x[i],y[i],x[i+1],y[i+1])) for i in range(len(x)-1)]
    # print(k_b)

    # 对应的分段区间
    Intervals = [(x[i],x[i+1]) for i in range(len(y)-1)]
    # print(Intervals)
    
    # 预测结果
    y_pre = []
    for x_value in x:
        index = get_x_index_in_interval(x_value,Intervals)
        # print(x_value,k_b[index])
        y_pre.append(y_func(x_value,k_b[index][0],k_b[index][1]))
    # print(y_pre)


    # 使用matplotlib来绘制数据点和拟合的分段直线  
    plt.scatter(x, y, color='blue', label='Data Points')  # 绘制数据点  
    plt.plot(x, y_pre, color='red', label='Fitted Piecewise Line')  # 绘制拟合直线  
    plt.title('Piecewise Linear Regression')  # 添加标题  
    plt.xlabel('X')  # 添加x轴标签  
    plt.ylabel('Y')  # 添加y轴标签  
    plt.legend()  # 添加图例  
    plt.show()  # 显示图表

输出结果

在这里插入图片描述

  • 由于本人水平有限,难免出现错漏,敬请批评改正。
  • 更多精彩内容,可点击进入Python日常小操作专栏、OpenCV-Python小应用专栏、YOLO系列专栏、自然语言处理专栏或我的个人主页查看
  • YOLOv8 Ultralytics:使用Ultralytics框架训练RT-DETR实时目标检测模型
  • 基于DETR的人脸伪装检测
  • YOLOv7训练自己的数据集(口罩检测)
  • YOLOv8训练自己的数据集(足球检测)
  • YOLOv5:TensorRT加速YOLOv5模型推理
  • YOLOv5:IoU、GIoU、DIoU、CIoU、EIoU
  • 玩转Jetson Nano(五):TensorRT加速YOLOv5目标检测
  • YOLOv5:添加SE、CBAM、CoordAtt、ECA注意力机制
  • YOLOv5:yolov5s.yaml配置文件解读、增加小目标检测层
  • Python将COCO格式实例分割数据集转换为YOLO格式实例分割数据集
  • YOLOv5:使用7.0版本训练自己的实例分割模型(车辆、行人、路标、车道线等实例分割)
  • 使用Kaggle GPU资源免费体验Stable Diffusion开源项目

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HCIA-H12-811题目解析(3)

1、【单选题】 以下关于路由器的描述&#xff0c;说法错误的是&#xff1f; 2、【单选题】某网络工程师在输入命令行时提示如下信息&#xff1a;Error:Unrecognized command foun at position.对于该提示信息说法正确的是&#xff1f; 3、【单选题】如下图所示的网络&#xf…

Vue3-03-reactive() 响应式基本使用

reactive() 的简介 reactive() 是vue3 中进行响应式状态声明的另一种方式&#xff1b; 但是&#xff0c;它只能声明 【对象类型】的响应式变量&#xff0c;【不支持声明基本数据类型】。reactive() 与 ref() 一样&#xff0c;都是深度响应式的&#xff0c;即对象嵌套属性发生了…

数据科学工作的20个Pandas函数(备忘)

Pandas 是数据科学社区中使用最广泛的库之一&#xff0c;它是一个强大的工具&#xff0c;可以进行数据操作、清理和分析。 本文将提供最常用的 Pandas 函数以及如何实际使用它们的样例。我们将涵盖从基本数据操作到高级数据分析技术的所有内容&#xff0c;到本文结束时&#xf…

还在为论文焦虑?免费AI写作大师帮你三分钟搞定

先来看1分钟的视频&#xff0c;对于要写论文的你来说&#xff0c;绝对有所值&#xff01; 还在为写论文焦虑&#xff1f;免费AI写作大师来帮你三步搞定 第一步&#xff1a;输入关键信息 第二步&#xff1a;生成大纲 稍等片刻后&#xff0c;专业大纲生成&#xff08;由于举例&am…

WPS没保存关闭了怎么恢复数据?3个方法,完成数据恢复!

“我今天在使用WPS时&#xff0c;突然有点急事出去了一趟&#xff0c;但是我忘记保存文档了&#xff0c;回来之后发现电脑自动关机了&#xff0c;我的文档也没了&#xff01;这可怎么办呢&#xff1f;有什么办法可以找回这些数据吗&#xff1f;” 在快节奏的工作中&#xff0c;…

PyQt6 表单布局Form Layout (QFormLayout)

锋哥原创的PyQt6视频教程&#xff1a; 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计43条视频&#xff0c;包括&#xff1a;2024版 PyQt6 Python桌面开发 视频教程(无废话版…

Phong vs. BRDF

在深入探讨 BRDF 和照明模型的概念之前&#xff0c;我们将介绍一种用于模拟有光泽&#xff08;glossy&#xff09;表面&#xff08;例如塑料球&#xff09;外观的技术。 从那里开始&#xff0c;推广该技术将变得更加容易&#xff0c;这就是 BRDF 和照明或反射模型概念的全部内容…

mysql:用SHOW COLUMNS FROM显示一个表的列信息

可以使用命令SHOW COLUMNS FROM table_name;显示一个表的列信息&#xff0c;例如&#xff1a;

电工--半导体器件

目录 半导体的导电特性 PN结及其单向导电性 二极管 稳压二极管 双极型晶体管 半导体的导电特性 本征半导体&#xff1a;完全纯净的、晶格完整的半导体 载流子&#xff1a;自由电子和空穴 温度愈高&#xff0c;载流子数目愈多&#xff0c;导电性能就愈好 型半导体&…

Springboot内置Tomcat线程数优化

Springboot内置Tomcat线程数优化 # 等待队列长度&#xff0c;默认100。队列也做缓冲池用&#xff0c;但也不能无限长&#xff0c;不但消耗内存&#xff0c;而且出队入队也消耗CPU server.tomcat.accept-count1000 # 最大工作线程数&#xff0c;默认200。&#xff08;4核8g内存…

Qt 线程

&#x1f4a1; 进度条显示拷贝进度&#xff08;verson 1&#xff09; 窗口上放置一个按钮和一个进度条部件&#xff0c;点击按钮&#xff0c;进行拷贝操作 —— 打开对话框选择源文件&#xff0c;然后再打开一个对话框 选择 目标文件存放位置和名称。拷贝过程中进度条显示当前…

力扣经典面试题——合并区间

合并区间 https://leetcode.cn/problems/merge-intervals/description/?envTypestudy-plan-v2&envIdtop-interview-150 这题思维量一般但比较考察API的使用。 1、数组的自定义排序 2、数组的初始化定义 3、Arrays转int 通过重写Comparator的compare方法来自定义排序规则…

SpringBoot热部署

SpringBoot热部署 借鉴链接&#x1f517;&#xff1a;SpringBoot中的热部署 添加devtools依赖和pom插件 <!-- devtools 依赖 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId&…

低代码核心能力表单引擎可以提高业务处理效率,降低成本的

在数字化时代&#xff0c;企业面临着海量的数据和复杂的业务需求&#xff0c;对于低代码表单的需求也逐渐增加&#xff0c;低代码表单可以提高企业的业务处理效率&#xff0c;还可以降低开发成本&#xff0c;缩短开发周期。 低代码表单应用场景​ 低代码的表单主要用于数据采集…

如何使用SOLIDWORKS在实体中快速拾取多个曲面

在 SOLIDWORKS 建模等操作中&#xff0c;很多操作中会需要选择多个曲面。这时候很多人会想到通过 control 键和鼠标的同时操作来完成曲面的选择。但是这种方法比较慢&#xff0c;而且碰到大量曲面的时候怎么办&#xff1f;很多用过PROE的人也会提出在 SOLIDWORKS 中有没有像PRO…

Anaconda入门使用指南完整版,Python零基础入门必看系列

文章目录 前言一、为什么选择Anaconda&#xff1f;1.1 什么是 Anaconda&#xff1f;1.2 什么是 conda &#xff1f;1.3 Anaconda 的优点&#xff1f; 二、如何安装Anaconda&#xff1f;三、如何管理Python包&#xff1f;四、如何管理Python环境&#xff1f;关于Python技术储备一…

一图看懂!生成式AI 算法现状

截至2023年8月&#xff0c;在算法备案系统登记的相关算法已经有151个&#xff0c;我们可以观察到All in AI的中国公司布局生成式AI算法的现状。在这151个算法中&#xff0c;33.8%的生成合成式算法都集中在文本生成领域&#xff0c;而图像、多媒体和音频方向也是各家的主攻方向之…

图像清晰度 和像素、分辨率、镜头的关系

关于图像清晰度的几个知识点分享。 知识点 清晰度 清晰度指影像上各细部影纹及其边界的清晰程度。清晰度&#xff0c;一般是从录像机角度出发&#xff0c;通过看重放图像的清晰程度来比较图像质量&#xff0c;所以常用清晰度一词。 而摄像机一般使用分解力一词来衡量它“分解被…

代码随想录27期|Python|Day13|栈与队列|239. 滑动窗口最大值 (一刷至少需要理解思路)|347.前 K 个高频元素 (一刷至少需要理解思路)

239. 滑动窗口最大值 单调队列 滑动窗口中的队列一直保持出口大&#xff0c;入口小的顺序。&#xff08;图&#xff1a;代码随想录&#xff09; 1、每次有新的元素进入&#xff08;也就是滑动窗口移动后&#xff09;&#xff0c;都需要先和入口的元素比较大小&#xff0c;如果…

cadence中如何在更新原理图封装

cadence中如何在更新原理图封装 一、更改原理图封装 当原理图画好后&#xff0c;如果我们发现某个封装错了&#xff0c;需要改动&#xff0c;需要找到你最初画Library中器件封装文件打开&#xff0c;进行修改&#xff0c;修改好后保存。 二、更新封装 保存好后&#xff0c;…