Python使用分段函数拟合数据

news2024/11/22 10:28:33

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开源项目

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

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

相关文章

【LeetCode】每日一题 2023_12_12 下一个更大元素 IV(堆,优先级队列/单调栈)

文章目录 刷题前唠嗑题目&#xff1a;下一个更大元素 IV题目描述代码与解题思路 刷题前唠嗑 LeetCode&#xff1f;启动&#xff01;&#xff01;&#xff01; 时隔两天&#xff0c;LeetCode 每日一题重新开张&#xff0c;流感已经不能阻挡我的脚步了&#xff01; 题目&#x…

【FAQ】推送前台应用的通知处理功能没生效,如何进行排查?

一、前台应用的通知处理简介 在调用推送接口时可以设置“foreground_show”字段控制前台应用的通知栏消息是否通过NC展示。“foreground_show”默认值为“true”&#xff0c;应用在前台时由NC展示通知栏消息&#xff1b;当设置为“false”时&#xff0c;应用在前台时&#xff…

<习题集><LeetCode><链表><61/83/82/86/92>

目录 61. 旋转链表 83. 删除排序链表中的重复元素 82. 删除排序链表中的重复元素 II 86. 分隔链表 92. 反转链表 II 61. 旋转链表 https://leetcode.cn/problems/rotate-list/ public ListNode rotateRight(ListNode head, int k) {//k等于0&#xff0c;或者head为空&…

高效利用内存资源之动态内存管理详解

目录 一、为什么存在动态内存分配 二、动态内存函数的介绍 2.1malloc 2.2free 2.3calloc 2.4realloc 三、常见的动态内存错误 3.1对NULL指针的解引用操作 3.2对动态开辟空间的越界访问 3.3对非动态开辟内存使用free释放 3.4使用free释放一块动态开辟内存的一部分 3.…

GNSS 精密单点定位(PPP) 所需数据文件及格式说明

目录 1.PPP所需的数据文件 (1)PPP中必要文件&#xff1a; (2)其他非必要文件&#xff1a; (3)文件示例&#xff1a; 2.数据下载方式 (1)网址下载&#xff1a; (2)GAMP II-GOOD软件下载 1.PPP所需的数据文件 (1)PPP中必要文件&#xff1a; 文件 功能 •观测值文件&…

降采样方法对NCC得分的影响因素评估

定位算法原理 关于不同的定位场景,最适合使用的算法原理,Halcon的原理文档中描述如下: 在图案缩放可用忽略,图案纹理丰富的场景,适合采用基于互相关的匹配。 输入参考图像,搜索图像,参考图像在搜索图像上滑动,得到滑动位置的NCC得分。如下图所示,高于阈值的最亮的地…

【多组学数据驱动的机器学习:生物医学研究的创新与突破】

简介&#xff1a;随着生物医学研究的不断发展&#xff0c;多组学数据在疾病预防、诊断和治疗方面发挥着越来越重要的作用。本文将介绍如何利用机器学习技术对多组学数据进行综合分析&#xff0c;以及这种方法在生物医学研究中的优势和潜力。 正文&#xff1a; 一、多组学数据…

linux搭建seata并使用

搭建seata 官网 在linux下搭建 下载1.6.1版本&#xff1a;地址 新建文件夹、上传压缩包并解压 [roothao ~]# cd /usr/local/software/ [roothao /usr/local/software]# ls canal docker elk gitlab jdk mysql nacos nexus nginx rabbitmq redis redis_sentinel…

【Linux】free命令使用

free命令 ​free是指查看当前系统内存的使用情况&#xff0c;它显示系统中剩余及已用的物理内存和交换内存&#xff0c;以及共享内存和被核心使用的缓冲区。 作者 作者&#xff1a;Brian Edmonds。 语法 free [参数] free 命令 -Linux手册页 命令选项及作用 执行令 &am…

ArcGIS无法绘制一个或多个图层

背景&#xff1a;在导入一份数据时候&#xff0c;arcmap出现无法绘制一个或多个图层的错误&#xff0c;...点数少于要素所要求的的数量&#xff0c;查阅了半天资料发现是制作数据时候拓扑关系错误造成&#xff0c;现将处理方法详细记录如下&#xff1a; 1.原数据&#xff1a; …

如何使用GaussDB创建外表(FOREIGN TABLE)

目录 一、前言 二、创建外表的特点 二、GaussDB创建外表访问外部数据库表&#xff08;示例&#xff09; 1、创建外表 2、FAQ&#xff1a;CREATE USER MAPPING错误 三、GaussDB创建外表映射数据文件&#xff08;示例&#xff09; 1、创建数据文件 2、创建外表 3、FAQ&a…

使用torch解决线性回归问题

数据处理 import torch import numpy as np import pandas as pd import matplotlib.pyplot as pltdatapd.read_csv(./datasets/Income1.csv) #数据准备data.head(5)#展示数据 #以上所有的代码都是用jupyter notebook写&#xff0c;形成了阶段性的结果展示 查看数据信息 dat…

Qt的坐标系系统 - 3个坐标系,2个变换

参考&#xff1a; https://zhuanlan.zhihu.com/p/584048811https://www.zhihu.com/tardis/zm/art/634951149?source_id1005 小谈Qt的坐标系系统 Qt中有三个坐标系 设备坐标系窗口坐标系逻辑坐标系 设备坐标系: 即Device坐标系。也是物理坐标系。即真实的的物理坐标系。 …

Ubuntu部署EMQX开源版MQTT服务器-Orange Pi部署-服务器部署

一、前言 作为全球最具扩展性的 MQTT 消息服务器&#xff0c;EMQX 提供了高效可靠海量物联网设备连接&#xff0c;能够高性能实时移动与处理消息和事件流数据&#xff0c;本文将介绍如何在Ubuntu 22.04上部署MQTT服务器。我们本次选择开源版&#xff0c;使用离线安装方式部署。…

ArcGIS pro与SuperMap根据属性自动填充颜色步骤

GIS项目经常会接触到控规CAD数据&#xff0c;想要把数据转换成GIS图层并发布&#xff0c;需要进行专题配图。研究了一下ArcGIS pro和SuperMap iDesktop的配图&#xff0c;整理一下用到的一些技术思路。 1、Excel表格根据RGB值添加单元格填充颜色 要实现如上效果图&#xff0c;…

【NR技术】NR NG-RAN整体架构 -网络接口以及无线协议框架(四)

1 引言 本博文介绍NR NG-RAN的网络节点间的接口以及无线协议框架。网络接口介绍包括RAN和NGC之间的NG接口&#xff1b;无线协议框架包括用户面和控制面协议。 2 NG接口 2.1 NG用户面接口 NG-U (user plane interface)是NG-RAN节点与UPF之间的接口。NG接口的用户平面协议栈如图…

UE4 透明物体不渲染显示??

问题描述&#xff1a;半透明特效在背景&#xff08;半透明材质模型&#xff09;前&#xff0c;当半透明特效开始移动的时候&#xff0c;随着速度的加快会逐渐不渲染&#xff01; 解决办法&#xff1a; 1.设置透明度排序 2.如果还没效果&#xff0c;修改半透明背景模型以下材质…

基于KEDA的Kubernetes自动缩放机制

KEDA以事件驱动的方式实现Kubernetes Pod的动态自动扩容机制&#xff0c;以满足不同的负载需求&#xff0c;从而提高应用可伸缩性和弹性。原文: Dynamic Scaling with Kubernetes Event-driven Autoscaling (KEDA) Kubernetes是容器编排平台的事实标准&#xff0c;已经彻底改变…

vp与相机连接

1.网线 2.相机电源线 1.相机电源线 接头 &#xff08;使用红色和黑色 线头要串联&#xff09; 1.光源连接口 2.光源控制器 开关 3.光源控制器通电接口 4.光源自动感应接口 &#xff08;一般用于自动控制光源 开关&#xff09; 1.两种不同类型的光源 1.光源亮度控制 2.切…

Leetcode—209.长度最小的子数组【中等】

2023每日刷题&#xff08;五十六&#xff09; Leetcode—209.长度最小的子数组 实现代码 class Solution { public:int minSubArrayLen(int target, vector<int>& nums) {int left 0, right 0;int ans nums.size() 1, s 0;for(; right < nums.size(); righ…