【Python文本处理】基于运动路线记录GPX文件解析,心率、速度、时间、功率、踏频、海拔等参数的生成和更改

news2024/11/23 18:40:02

【Python文本处理】基于运动路线记录GPX文件解析,心率、速度、时间、功率、踏频、海拔等参数的生成和更改

GPX文件本身其实就是坐标、海拔、时间、心率等综合性的xml文件
如图:
在这里插入图片描述
海拔:ele
时间:time
心率:heartrate
功率:power
踏频:cadence
距离:distance
一般不用距离distance 但可以根据距离求瞬时速度(前提是时间间隔均匀 最小精度不低于1s) 不过如果距离和坐标之差相差太远 则不太好确定 Strava等软件通过这个来计算瞬时速度和距离 但不用于计算赛段速度(赛段时间)

GPX文件读取和保存

def save_gpx(gpx,path):
    try:
        f=open(path, 'w', encoding="utf-8")
    except:
        f=open(path, 'a', encoding="utf-8")
    for i in gpx:
        f.write(i)
    f.close()

path="./test.gpx"
    
f=open(path, 'r', encoding="utf-8")
gpx_lines=f.readlines()
f.close()
save_gpx(gpx_lines,"./test.gpx")

传入一个GPX文件数据列表 生成GPX文件

GPX文件生成和更改

一般来说 不管是运动记录 还是路线图 trkpt后面的经纬度坐标和海拔是一定有的
在这里插入图片描述
如图就是最基本的:

添加和更改时间

def make_time(gpx,coefficient,time_str):
    gpx_list=[]
    s=''
    first_time=time.mktime(time.strptime(time_str, "%Y-%m-%dT%H:%M:%SZ"))
    now_time=first_time
    flag=0
    for i in range(len(gpx)):
        s=gpx[i]
        if gpx[i].count('</time>') and flag==0:
            s='<time>'+time_str+'</time>\n'
            flag=1
        elif gpx[i].count('<trk>') and flag==0:
            s='<time>'+time_str+'</time>\n'+ gpx[i]
            flag=1
        elif flag==1:
            try:
                if gpx[i].count('</ele>'):
                    now_time=now_time+1*coefficient
                    change_time=time.strftime("%Y-%m-%dT%H:%M:%SZ",time.localtime(now_time))  
                    s_list=s.split("</ele>")
                    s=s_list[0]+'</ele>\n<time>'+change_time+'</time>'+s_list[1]
            except:
                pass
        gpx_list.append(s)
    return gpx_list
    
def change_time(gpx,coefficient,time_add):
    gpx_list=[]
    s=''
    first_time=0
    for i in range(len(gpx)):
        s=gpx[i]
        try:
            ti=str((gpx[i].split("<time>")[1]).split("</time>")[0])
            now_time = time.mktime(time.strptime(ti, "%Y-%m-%dT%H:%M:%SZ"))
            if first_time==0:
                first_time=now_time
                change_time=now_time+time_add
            else:
                change_time=((now_time-first_time)*coefficient)+first_time+time_add
            change_time=time.strftime("%Y-%m-%dT%H:%M:%SZ",time.localtime(change_time))  
            s=str(gpx[i].replace(ti,str(change_time)))
        except:
            pass
        gpx_list.append(s)
    return gpx_list

添加时间要传入时间间隔系数(越大 时间间隔越长 速度越慢) 以及初始时间字符串(格式"%Y-%m-%dT%H:%M:%SZ")
更改时间同样就是要传入时间间隔系数和时间偏移量(单位s)
在这里插入图片描述
效果

添加和更改数据

data_choice=[-5,-4,-4,-3,-3,-3,-2,-2,-2,-1,-1,-1,-1,0,0,0,0,1,1,1,1,2,2,2,3,3,3,4,4,5]
def data_list_creat(n,avg,ran):
    data_list=[]
    data_list.append(avg)
    
    min_data=avg-ran
    max_data=avg+ran
    for i in range(n-1):  
        num=data_list[i]+random.choice(data_choice) 
        if num < min_data:
            num=data_list[i]+1
        if num > max_data:
            num=data_list[i]-1
        data_list.append(num)            
        
    return data_list

以avg为中芯 ran为范围 生成n个随机数据的列表 随机取值时 从data_choice中获取

def make_data(gpx,avg,ran,keywords):
    gpx_list=[]
    data_list=[]
    num_list=[]
    s=''
    j=0
    distance=0
    for i in range(len(gpx)):
        try:
            if gpx[i].count('</time>'):
                j=j+1
                num_list.append(i)
        except:
            pass

    data_list=data_list_creat(j,avg,ran)
    j=0    
    for i in range(len(gpx)):
        s=gpx[i]   
        try:
            if i==num_list[j]: 
                s_list=s.split("</time>")                
                if keywords == "distance":
                    distance=distance+data_list[j]
                    s=s_list[0]+"</time>\n<extensions><"+keywords+">"+str(distance)+"</"+keywords+"></extensions>"+s_list[1]
                else:
                    s=s_list[0]+"</time>\n<extensions><"+keywords+">"+str(data_list[j])+"</"+keywords+"></extensions>"+s_list[1]
                j=j+1
        except:
            pass
        gpx_list.append(s)
    return gpx_list

def change_data(gpx,coefficient,keywords):
    gpx_list=[]
    s=''
    for i in range(len(gpx)):
        s=gpx[i]
        try:
            heart=str((gpx[i].split("<"+keywords+">")[1]).split("</"+keywords+">")[0])
            change=int(int(heart)*coefficient)                
            s=str(gpx[i].replace(heart,str(change)))
        except:
            pass
        gpx_list.append(s)
    return gpx_list

传入GPX列表、数据中心值和范围、数据关键词
更改时则传入系数和关键词
关键词有:

'''data keywords
心率 "heartrate"
踏频 "cadence"
距离 "distance"
功率 "power"
'''

其中 距离"distance"在进行make时 是累加起来的 其他的则是在时间点随机选取
在这里插入图片描述
删除数据也要传入关键词

def clean_data(gpx,keywords):
    gpx_list=[]
    s=''
    clean_flag=0
    for i in range(len(gpx)):
        s=gpx[i]   
        if clean_flag==0:
            if gpx[i].count("<"+keywords+">"):
                clean_flag=1
                s_list=gpx[i].split("<"+keywords+">")
                if gpx[i].count("</"+keywords+">"):
                    clean_flag=0                    
                    s2_list = s_list[1].split("</"+keywords+">")
                    s_list[1]=s2_list[1]
                s=s_list[0]+s_list[1]
        else:
            if gpx[i].count("</"+keywords+">"):
                clean_flag=0
                s_list=gpx[i].split("</"+keywords+">")
                s=s_list[1]
            else:
                s=''            
        gpx_list.append(s)
    return gpx_list

更改海拔


def change_ele(gpx,coefficient,add):
    gpx_list=[]
    s=''
    for i in range(len(gpx)):
        s=gpx[i]
        try:
            el=str((gpx[i].split("<ele>")[1]).split("</ele>")[0])
            change_el=int(int(el)*coefficient+add)
            s=str(gpx[i].replace(el,str(change_el)))
        except:
            pass
        gpx_list.append(s)
    return gpx_list

def change_ele_climb(gpx,coefficient,add):
    gpx_list=[]
    s=''
    j=0
    for i in range(len(gpx)):
        s=gpx[i]
        try:
            el=str((gpx[i].split("<ele>")[1]).split("</ele>")[0])
            change_el=int(j*coefficient+add)
            j=j+1
            s=str(gpx[i].replace(el,str(change_el)))
        except:
            pass
        gpx_list.append(s)
    return gpx_list

第一个同更改时间一样 填入系数和偏移
第二个是更改为爬坡(海拔逐渐上升)
在这里插入图片描述

更改坐标

def change_location(gpx,lat_add,lon_add):
    gpx_list=[]
    s=''
    lat_add=Decimal(str(lat_add))
    lon_add=Decimal(str(lon_add))
    for i in range(len(gpx)):
        s=gpx[i]
        if gpx[i].count('<trkpt'):
            s_list=gpx[i].split('"')
            lat=Decimal(s_list[1])+lat_add
            lon=Decimal(s_list[3])+lon_add
            s=s_list[0]+'"'+str(lat)+'"'+s_list[2]+'"'+str(lon)+'"'+s_list[4]
        gpx_list.append(s)
    return gpx_list

传入偏移即可
在这里插入图片描述

找坐标极点

def find_pole(gpx):
    south=-90
    north=90
    west=-180
    east=180
    location=[[0.0,0.0],[0.0,0.0],[0.0,0.0],[0.0,0.0]]
    for i in range(len(gpx)):
        if gpx[i].count('<trkpt'):
            s_list=gpx[i].split('"')
            lat=Decimal(s_list[1])
            lon=Decimal(s_list[3])
            if lat>south:  #最北
                south=lat
                location[0]=[lat,lon]
            if lat<north:  #最南
                north=lat
                location[1]=[lat,lon]
            if lon>west:  #最东
                west=lon
                location[2]=[lat,lon]
            if lon<east:  #最西
                east=lon
                location[3]=[lat,lon]
    return location

一般配合更改坐标使用
在这里插入图片描述
分别输出最北点 最南点 最东点和最西点

GPX总结

在这里插入图片描述

# -*- coding: utf-8 -*-
"""
Created on Thu May 11 15:33:28 2023

@author: ZHOU
"""
import time
import random
from decimal import Decimal

data_choice=[-5,-4,-4,-3,-3,-3,-2,-2,-2,-1,-1,-1,-1,0,0,0,0,1,1,1,1,2,2,2,3,3,3,4,4,5]

'''data keywords
心率 "heartrate"
踏频 "cadence"
距离 "distance"
功率 "power"
'''
def find_pole(gpx):
    south=-90
    north=90
    west=-180
    east=180
    location=[[0.0,0.0],[0.0,0.0],[0.0,0.0],[0.0,0.0]]
    for i in range(len(gpx)):
        if gpx[i].count('<trkpt'):
            s_list=gpx[i].split('"')
            lat=Decimal(s_list[1])
            lon=Decimal(s_list[3])
            if lat>south:  #最北
                south=lat
                location[0]=[lat,lon]
            if lat<north:  #最南
                north=lat
                location[1]=[lat,lon]
            if lon>west:  #最东
                west=lon
                location[2]=[lat,lon]
            if lon<east:  #最西
                east=lon
                location[3]=[lat,lon]
    return location

def change_location(gpx,lat_add,lon_add):
    gpx_list=[]
    s=''
    lat_add=Decimal(str(lat_add))
    lon_add=Decimal(str(lon_add))
    for i in range(len(gpx)):
        s=gpx[i]
        if gpx[i].count('<trkpt'):
            s_list=gpx[i].split('"')
            lat=Decimal(s_list[1])+lat_add
            lon=Decimal(s_list[3])+lon_add
            s=s_list[0]+'"'+str(lat)+'"'+s_list[2]+'"'+str(lon)+'"'+s_list[4]
        gpx_list.append(s)
    return gpx_list

def change_ele(gpx,coefficient,add):
    gpx_list=[]
    s=''
    for i in range(len(gpx)):
        s=gpx[i]
        try:
            el=str((gpx[i].split("<ele>")[1]).split("</ele>")[0])
            change_el=int(int(el)*coefficient+add)
            s=str(gpx[i].replace(el,str(change_el)))
        except:
            pass
        gpx_list.append(s)
    return gpx_list

def change_ele_climb(gpx,coefficient,add):
    gpx_list=[]
    s=''
    j=0
    for i in range(len(gpx)):
        s=gpx[i]
        try:
            el=str((gpx[i].split("<ele>")[1]).split("</ele>")[0])
            change_el=int(j*coefficient+add)
            j=j+1
            s=str(gpx[i].replace(el,str(change_el)))
        except:
            pass
        gpx_list.append(s)
    return gpx_list

def data_list_creat(n,avg,ran):
    data_list=[]
    data_list.append(avg)
    
    min_data=avg-ran
    max_data=avg+ran
    for i in range(n-1):  
        num=data_list[i]+random.choice(data_choice) 
        if num < min_data:
            num=data_list[i]+1
        if num > max_data:
            num=data_list[i]-1
        data_list.append(num)            
        
    return data_list

def clean_data(gpx,keywords):
    gpx_list=[]
    s=''
    clean_flag=0
    for i in range(len(gpx)):
        s=gpx[i]   
        if clean_flag==0:
            if gpx[i].count("<"+keywords+">"):
                clean_flag=1
                s_list=gpx[i].split("<"+keywords+">")
                if gpx[i].count("</"+keywords+">"):
                    clean_flag=0                    
                    s2_list = s_list[1].split("</"+keywords+">")
                    s_list[1]=s2_list[1]
                s=s_list[0]+s_list[1]
        else:
            if gpx[i].count("</"+keywords+">"):
                clean_flag=0
                s_list=gpx[i].split("</"+keywords+">")
                s=s_list[1]
            else:
                s=''            
        gpx_list.append(s)
    return gpx_list

def make_time(gpx,coefficient,time_str):
    gpx_list=[]
    s=''
    first_time=time.mktime(time.strptime(time_str, "%Y-%m-%dT%H:%M:%SZ"))
    now_time=first_time
    flag=0
    for i in range(len(gpx)):
        s=gpx[i]
        if gpx[i].count('</time>') and flag==0:
            s='<time>'+time_str+'</time>\n'
            flag=1
        elif gpx[i].count('<trk>') and flag==0:
            s='<time>'+time_str+'</time>\n'+ gpx[i]
            flag=1
        elif flag==1:
            try:
                if gpx[i].count('</ele>'):
                    now_time=now_time+1*coefficient
                    change_time=time.strftime("%Y-%m-%dT%H:%M:%SZ",time.localtime(now_time))  
                    s_list=s.split("</ele>")
                    s=s_list[0]+'</ele>\n<time>'+change_time+'</time>'+s_list[1]
            except:
                pass
        gpx_list.append(s)
    return gpx_list

def make_data(gpx,avg,ran,keywords):
    gpx_list=[]
    data_list=[]
    num_list=[]
    s=''
    j=0
    distance=0
    for i in range(len(gpx)):
        try:
            if gpx[i].count('</time>'):
                j=j+1
                num_list.append(i)
        except:
            pass

    data_list=data_list_creat(j,avg,ran)
    j=0    
    for i in range(len(gpx)):
        s=gpx[i]   
        try:
            if i==num_list[j]: 
                s_list=s.split("</time>")                
                if keywords == "distance":
                    distance=distance+data_list[j]
                    s=s_list[0]+"</time>\n<extensions><"+keywords+">"+str(distance)+"</"+keywords+"></extensions>"+s_list[1]
                else:
                    s=s_list[0]+"</time>\n<extensions><"+keywords+">"+str(data_list[j])+"</"+keywords+"></extensions>"+s_list[1]
                j=j+1
        except:
            pass
        gpx_list.append(s)
    return gpx_list

def change_data(gpx,coefficient,keywords):
    gpx_list=[]
    s=''
    for i in range(len(gpx)):
        s=gpx[i]
        try:
            heart=str((gpx[i].split("<"+keywords+">")[1]).split("</"+keywords+">")[0])
            change=int(int(heart)*coefficient)                
            s=str(gpx[i].replace(heart,str(change)))
        except:
            pass
        gpx_list.append(s)
    return gpx_list

def change_time(gpx,coefficient,time_add):
    gpx_list=[]
    s=''
    first_time=0
    for i in range(len(gpx)):
        s=gpx[i]
        try:
            ti=str((gpx[i].split("<time>")[1]).split("</time>")[0])
            now_time = time.mktime(time.strptime(ti, "%Y-%m-%dT%H:%M:%SZ"))
            if first_time==0:
                first_time=now_time
                change_time=now_time+time_add
            else:
                change_time=((now_time-first_time)*coefficient)+first_time+time_add
            change_time=time.strftime("%Y-%m-%dT%H:%M:%SZ",time.localtime(change_time))  
            s=str(gpx[i].replace(ti,str(change_time)))
        except:
            pass
        gpx_list.append(s)
    return gpx_list

def save_gpx(gpx,path):
    try:
        f=open(path, 'w', encoding="utf-8")
    except:
        f=open(path, 'a', encoding="utf-8")
    for i in gpx:
        f.write(i)
    f.close()
    
if __name__ == '__main__':
    path="./test.gpx"
    
    f=open(path, 'r', encoding="utf-8")
    gpx_lines=f.readlines()
    f.close()    

    gpx=change_data(gpx_lines,2,"distance")
    gpx=change_time(gpx,1,-1416165)
    save_gpx(gpx,path)
    

py打包

Pyinstaller打包exe(包括打包资源文件 绝不出错版)

依赖包及其对应的版本号

PyQt5 5.10.1
PyQt5-Qt5 5.15.2
PyQt5-sip 12.9.0

pyinstaller 4.5.1
pyinstaller-hooks-contrib 2021.3

Pyinstaller -F setup.py 打包exe

Pyinstaller -F -w setup.py 不带控制台的打包

Pyinstaller -F -i xx.ico setup.py 打包指定exe图标打包

打包exe参数说明:

-F:打包后只生成单个exe格式文件;

-D:默认选项,创建一个目录,包含exe文件以及大量依赖文件;

-c:默认选项,使用控制台(就是类似cmd的黑框);

-w:不使用控制台;

-p:添加搜索路径,让其找到对应的库;

-i:改变生成程序的icon图标。

如果要打包资源文件
则需要对代码中的路径进行转换处理
另外要注意的是 如果要打包资源文件 则py程序里面的路径要从./xxx/yy换成xxx/yy 并且进行路径转换
但如果不打包资源文件的话 最好路径还是用作./xxx/yy 并且不进行路径转换

def get_resource_path(relative_path):
    if hasattr(sys, '_MEIPASS'):
        return os.path.join(sys._MEIPASS, relative_path)
    return os.path.join(os.path.abspath("."), relative_path)

而后再spec文件中的datas部分加入目录
如:

a = Analysis(['cxk.py'],
             pathex=['D:\\Python Test\\cxk'],
             binaries=[],
             datas=[('root','root')],
             hiddenimports=[],
             hookspath=[],
             hooksconfig={},
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)

而后直接Pyinstaller -F setup.spec即可

如果打包的文件过大则更改spec文件中的excludes 把不需要的库写进去(但是已经在环境中安装了的)就行

这些不要了的库在上一次编译时的shell里面输出
比如:
在这里插入图片描述

在这里插入图片描述
然后用pyinstaller --clean -F 某某.spec

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

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

相关文章

推荐5个非常强大的ChatGPT浏览器插件|你的生产力提高工具

近期&#xff0c;ChatGPT变得越来越热门&#xff0c;为此&#xff0c;许多浏览器插件也随之问世。这些基于ChatGPT的浏览器插件大大提高了ChatGPT的能力&#xff0c;使得我们能够更高效地在平时的上网、工作和学习中获得帮助&#xff0c;从而节省了大量时间。 今天我来给大家介…

168天,从外包转岗到阿里测开岗.....

本人毕业于某普通二本院校非计算机专业&#xff0c;跨专业入行测试&#xff0c;至今有近 5年工作经验。 第一份测试工作是在腾讯做了两年外包。总体感受就是 这份工作缺乏归属感&#xff0c;心里总有一种落差&#xff0c;进步空间不大&#xff0c; 接触不到核心技术&#xf…

分享以MM32SPIN0280单片机为主控洗衣机方案

洗衣机是利用电能产生机械作用来洗涤衣物的清洁电器&#xff0c;按驱动方法有3类&#xff0c;直接驱动&#xff0c;皮带驱动&#xff0c;波轮式驱动。 主变一体洗衣机方案以MM32SPIN0280为主控 MCU规格&#xff1a; -ArmCortex-M0内核&#xff0c;最高工作频率可达96MHz -128…

软件测试面试至今0 offer的小伙伴,问题到底出在哪儿?

转眼已是五月中旬&#xff0c;求职招聘季也快要结束啦&#xff0c;如果没点真技术 真本事&#xff0c;不了解点职场套路&#xff0c;在今年行情下&#xff0c;找工作可是难上加难。 现在点开微博或者脉脉&#xff0c;只要搜索“招聘”&#xff0c;用“惨不忍睹”来形容也不为过…

《计算机组成原理》期末复习一文总结

文章目录 第1讲&#xff1a;概论一、课程内容课程简介课程教材慕课堂二、课程组成结构计算机系统组成计算机软硬件概念以运算器为中心现代计算机的存储器为中心 硬件各部分关系内存基本组成运算器基本组成累加器&#xff08;相当于寄存器&#xff09; 控制器组成 第2讲&#xf…

[VRTK4.0]设置OpenXRCameraRig

学习目标&#xff1a; 演示如何设置Unity项目以支持OpenXR&#xff0c;以及如何安装VRTK v4TiliaUnitvXRFrameWork用于OpenXR的CameraRig。还展示了如何设置Tilia TrackedAlias预制件可轻松访问底层CameraRig功能。 流程&#xff1a; 步骤一&#xff1a; 我们现在要将我…

【数项级数】敛散性判别

阅读本篇之前&#xff0c;建议可以先看一下上一篇文章哦&#xff01; 【数项级数】无穷个数相加一定是个数吗&#xff1f; 柯西收敛准则判断级数敛散性 基本思想利用柯西收敛准则判断级数是否收敛推论&#xff1a;定理 基本思想 在上一篇文章中&#xff0c;初识数项级数&#…

如果要走网络安全这方面,需要考哪些证呢?

网络工程师VS网络安全工程师&#xff0c;哪个能带你走上人生巅峰&#xff1f; 众所周知&#xff0c;网络安全是以技术为核心的行业&#xff0c;年薪的多少是和技术挂钩的&#xff0c;但是很多没有工作经验的或者想转行到网安的大学生想要找到一份好工作&#xff0c;一个含金量…

Unity 灯光组件Light

灯光简介 在 Hierarchy 窗口右键&#xff0c;选择 Light&#xff0c;再选择具体的灯光类型&#xff0c;在 Inspector 窗口查看灯光组件如下&#xff1a; Type&#xff1a;灯光类型&#xff0c;主要有&#xff1a;Directional&#xff08;平行光&#xff09;、Spot&#xff08;聚…

【OpenStack】初识

云计算中的操作系统&#xff0c;负责计算能力 三大核心组件&#xff1a;子项目nova负责计算能力、neutron(Quantum):Networking网络、Swift&#xff1a;Storage 存储 共享服务&#xff1a;认证服务、数据库服务等 api、dashboard浏览器界面 主要组件&#xff1a; 1. 2. OpenSt…

uniapp在H5获取当前定位信息不需要SDK可直接获取城市(包括经纬度省市区和市区编码)

前言 最近在做获取用户当前定位信息的时候&#xff0c;发现uniapp官方提供的uni.getLocation(OBJECT)兼容性并不是特别好&#xff0c;光注意事项都是密密麻麻一大堆&#xff0c;在实际使用场景下&#xff0c;效果并不理想&#xff0c;也不是很稳定。于是便重新封装了一下腾讯地…

前端web入门-CSS-day03

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 CSS 初体验 CSS 定义 CSS 引入方式 选择器 标签选择器 类选择器 id选择器 通配符选择器 画盒子 …

“智慧赋能 强链塑链”——浅谈核电行业物资供应管理优化新动能

核电备件供应链管理创新的必要性、 迫切性和重要性 核电厂对核电机组的稳定运行和核安全有着非常高的要求&#xff0c;在我国核电发展初期阶段&#xff0c;核电厂为了提高机组的安全稳定运行&#xff0c;通常都备有种类多、数量大的备品备件。经过多年的运营&#xff0c;现役…

华为、思科、Juniper 三厂商NAT配置详解

大家好&#xff0c;这里是网络技术联盟站。 本文给大家介绍华为、思科、Juniper 三大厂商NAT配置详解。 1. 华为&#xff08;Huawei&#xff09; 华为是一家全球领先的信息与通信技术解决方案供应商&#xff0c;其网络设备提供了强大的NAT功能。 下面是华为设备上的NAT配置示…

C语言——自定义数据类型

C语言自定义数据类型——结构体、共用体、枚举 目录 一、 结构体的基本用法1.1 定义1.2 定义格式1.3 结构体变量1.3.1 概念1.3.2 格式1.3.3 定义结构体变量(1) 先定义结构体&#xff0c;再定义结构体变量。(2) 定义结构体的同时&#xff0c;定义结构体变量。 1.3.4 结构体变量…

L1L2,范数损失

目录 1. L2范数&#xff08;欧氏距离&#xff09;2. L2范数损失&#xff0c;这个听的/用的少一些3-1. L2损失&#xff08;均方误差&#xff09;3-2. L1损失&#xff08;平均绝对误差&#xff09;4. L1范数L2范数在机器学习方面的区别5. 为什么L2范数可以防止过拟合? 1. L2范数…

函数式接口入门简介

这里写目录标题 引子四种函数式接口-简单Demo四种函数式接口介绍函数式接口实战-代码对比 引子 只包含一个抽象方法的接口&#xff0c;就称为函数式接口。来源&#xff1a;java.util.function 我想在方法内直接定义方法直接获得结果&#xff0c;主要是也是为了配置lambda表达…

斐波那契数列数列相关简化2

看这篇文章前先看一下第一篇文章&#xff1a; 斐波那契数列数列相关简化1_鱼跃鹰飞的博客-CSDN博客 根据第一篇文章总结如下&#xff1a; 如果某个递归&#xff0c;除了初始项之外&#xff0c;具有如下的形式 F(N) C1 * F(N) C2 * F(N-1) … Ck * F(N-k) ( C1…Ck 和k都…

泛微 E-Office文件上传漏洞复现(CVE-2023-2523、CVE-2023-2648)

0x01 产品简介 泛微E-Office是一款标准化的协同 OA 办公软件&#xff0c;泛微协同办公产品系列成员之一,实行通用化产品设计&#xff0c;充分贴合企业管理需求&#xff0c;本着简洁易用、高效智能的原则&#xff0c;为企业快速打造移动化、无纸化、数字化的办公平台。 0x02 漏…

科普拓视野,逐梦新未来——人工智能研学工作坊

随着科技的发展&#xff0c;人工智能逐渐成为世界热门技术之一&#xff0c;为更好启发服务对象想象力&#xff0c;增强其创新精神和实践能力&#xff0c;让服务对象深入感受科技的发展与魅力&#xff0c;2023年5月20日&#xff0c;在阳泉市未成年人救助保护中心的支持下&#x…