当前位置: 首页 > news >正文

深度学习2

四、tensor常见操作

1、元素值

1.1、获取元素值

        tensor.item() 返回tensor的元素;只能在一个元素值使用,多个报错,当存在多个元素值时需要使用索引进行获取到一个元素值时在使用 item。

1.2、元素值运算

        tensor对元素值的运算:加、减、乘、除、取余、取整、幂

加减乘除:加法(+、add、add_),减法(-、sub、sub_),乘法(*、mul、mul_),除法(/、div、div_)

取整、取余、幂:取整(//)、取余(%):与python 列表操作一致,每个元素都进行单独运算。

# 运算 加减乘除
# 带_的方法基本上都是修改原数据
import torch
torch.manual_seed(666) # 设置随机种子
data1 = torch.randint(1,10,(3,3))
data2 = torch.randint(1,10,(3,3))# 加法
print("+++++++++")
x1 = data1+100
print(x1)
x1 = data1.add(100)
print(x1)
data2.add_(200)
print(data2)# 减法
print("----------")
x1 = data1-100
print(x1)
x1 = data1.sub(100)
print(x1)
data2.sub_(200)
print(data2)# 乘法
print("**********")
x1 = data1*100
print(x1)
x1 = data1.mul(100)
print(x1)
data2.mul_(200)
print(data2)# 除法
print("/")
x1 = data1/100
print(x1)
data2 =data2.type(torch.float16) # 原数据为整数,需要转为浮点数
x1 = data1.div(100) 
print(x1)
data2.div_(200) 
print(data2)

2、阿达玛积

        .dot 点积、* 乘法 、mul 、mm、matmul、@

直接相乘或mul方法都是元素对于位置相乘(形状相同,或者一个为标量)

tensor相乘:data1.dot(data2) 点积用于一阶张量;

                     data1.mm(data2) 用于二阶张量;

                     data1@data2、data1.matmul(data2) 用于一阶及以上张量

import torch# 相乘   * mul()
x = torch.tensor([[1,2],[3,4]])
y = torch.tensor([[11,22],[33,44]])
x1 = x*y
print(x1)
x2 = x.mul(y)
print(x2)# dot matmul
x = torch.tensor([1,2])
y = torch.tensor([11,22])
x3 = x.dot(y)
print(x3)
x3 = x.matmul(y)
print(x3)
x4 = x@y
print(x4)# @ matmul mm
x = torch.tensor([[1,2],[3,4]])
y = torch.tensor([[11,22],[33,44]])
x4 = x@(y)
print(x4)
x5 = x.matmul(y)
print(x5)
x6 = x.mm(y)
print(x6)

3、索引操作

3.1、下标索引

        和列表操作一样,根据元素下标获取对应元素

import torch
torch.manual_seed(666)
x = torch.randint(1,10,(2,3,3))
print(x)
print(x[1])
print(x[1,2])
print(x[1,2,2])
print(x[1,2,2].item())

3.2、切片索引

        与列表操作一致

import torch
torch.manual_seed(666)
x = torch.randint(1,10,(2,3,3))
print(x[:5]) # 下标超出索引界限并不会报错,给出全部数据
print(x[:2,2])
print(x[:2,2:3])
print(x[:2,2:3,1])
print(x[:2,2:3,1:2]) 
print(x[:2,2:3,1:2][1])
print(x[:2,2:3,1:2][1].item())

3.3、布尔索引

        根据得到True返回对应位置的元素,单独索引列时,将该列数据变成一维布尔值结果,根据结果True的下标再去原函数获取对应数据

import torch
torch.manual_seed(666)
x = torch.randint(1,10,(5,5))
print(x)
print(x[x==1])
print(x[x>5])

3.4、组合索引

        将前面三种索引方式组合使用

多个下标索引

下标索引使用列表时,分别取对于数据的多行或多列:

x[[1,2]] 取第二行和第三行的所有列;

 x[,[1,2]] 取所有行的第二列和第三列;

当原数据的行和列都是列表形式时,数据一一对应:也就是从前往后是 1对1,1对n,n对1,n对n,不能n对m:

错误:x[[0,1],[0,1,2]]

正确应该是:x[1,[0,1]] 表示第二行的第一列和第二列;x[[0,1],1] 表示第一行和第二行的第二列;x[[0,1],[0,1]] 表示第一行的第一列和第二行的第二列数据

多个切片索引:维度保持不变,x[:2,:2]表示行取0-1,列取0-1的数据

布尔索引和切片索引:x[x[1]==1, :2]:将x中第二行等于1的数据下标返回作为行下标索引,切0-1列数据

import torch
torch.manual_seed(15)
x = torch.randint(2000,3000,(5,5))
print(x)
x1 = x[(x[:,0]%2==0) & (x[:,1]%2==1) & (x[:,2]%4==0) & (x[:,2]%100!=0),3:5]
print(x1)

4、拼接

        cat stack

        dim 表示维度

        torch.cat([tensor1,tnsor2],dim =0):将tensor1和ensor2拼接;dim=0表示按照行第一维度拼接,添加行,列不变;dim=1表示按照列拼接,行不变;dim=3表示行列格式不变,将元素加维。

import torch
torch.manual_seed(666)
x = torch.randint(1,10,(2,2,2))
y = torch.randint(10,20,(2,2,2))
print(x)
print(y)
z = torch.cat([x,y],dim = 0)
print(z)
z = torch.cat([x,y],dim = 1)
print(z)
z = torch.cat([x,y],dim = 2)
print(z)

         torch.stack([tensor1,tensor2],dim=0):表示将tensor1和tensor2连接;dim=0表示将两个整体放入列表的第一个元素和第二个元素的方式连接;dim=1表示扩展维度后将两个tensor的行下标相同作为同一列的不同行;dim=2表示将原本同一行的数据变成同一列不同行,相当于把第一个列拆分放入下面最接近的行,将第二个同样位置放入第二列,扩展维度后两个tensor的对应位置元素相同作为同一行的不同列

import torch
torch.manual_seed(666)
x = torch.randint(1,10,(2,2))
y = torch.randint(10,20,(2,2))
print(x)
print(y)
z = torch.stack([x,y],dim = 0)
print(z)
z1 = torch.stack([x,y],dim = 1)
print(z1)
z2 = torch.stack([x,y],dim = 2)
print(z2)

5、形状操作

5.1、形状重组

reshape(size)、view(size)

reshape(size):与数组一致,改变tensor形状

import torch
# reshape
data = torch.randint(0, 10, (4, 3))
print(data)
# 1. 使用reshape改变形状
data1 = data.reshape(2, 2, 3)
print(data1)# 2. 使用-1表示自动计算
data2= data.reshape(2, -1)
print(data2)

view(size):将内存连续的tensor形状改变返回新的内存连续tensor,reshape内存不连续

import torchtensor = torch.tensor([[1, 2, 3], [4, 5, 6]])# 使用view进行变形操作
tensor = tensor.view(2, -1)
print(tensor)# 再次使用view操作
try:tensor = tensor.view(3, -1)print("可以使用view")
except:print("不可以使用view")# 进行转置
tensor = tensor.t()
print(tensor)# 转置后使用view操作
try:tensor.view(3, -1)print("可以使用view")
except:print("不可以使用view")

5.2、维度元素个数交换

transpose(下标)、permute(下标)

transpose(维度下标):将两个指定的维度交换

import torch# transpose
x = torch.tensor([[[1, 2, 3], [4, 5, 6]],[[11, 22, 33], [44, 55, 66]]])
print(x,x.shape)
x1 = x.transpose(1,0) # 在不改变其他维度下进行了转置
print(x1,x1.shape)

permute(维度下标):多个下标,根据设置的顺序重新排列维度元素

import torch# permute
torch.manual_seed(666)
x = torch.randint(0,255,(2,3,4))
print(x,x.shape)
x2 = x.permute(2,0,1)
print(x2,x2.shape)
x3 = x.permute(2,1,0)
print(x3,x3.shape)

5.3、维度展开

flatten(start_dim,end_dim)

flatten(start_dim,end_dim):默认从0到-1,所有维度都展开为一维;从start_dim维度开始,到end_dim-1维度结束展开

import torchx = torch.randint(0,255,(2,3,2))
print(x)
x1 = x.flatten()
print(x1)
x2 = x.flatten(start_dim=0,end_dim=1)
print(x2)

 5.4、降维和升维

squeeze()和unsqueeze()

squeeze:无参数默认将自动将所有元素个数为1的维度展开,参数为整数,表示维度下标

import torchimport torch
# 升维和降维
x = torch.randint(0,255,(1,3,4,1))
print(x.shape) #  torch.Size([1, 3, 4, 1])# 元素个数为1的全部降维
x1= x.squeeze() 
print(x1.shape) # torch.Size([3, 4])# 第一个维度释放
x11= x.squeeze(0) #   torch.Size([3, 4, 1])
print(x11.shape)# 释放第二个维度操作失败,因为有多个元素
x11= x.squeeze(1) #  torch.Size([1, 3, 4, 1])
print(x11.shape)# 升维度,必须填写参数
x2 = x.unsqueeze(0) # torch.Size([1, 1, 3, 4, 1])
print(x2.shape)x2 = x.unsqueeze(2) # torch.Size([1, 3, 1, 4, 1])
print(x2.shape)

6、分割

        chunk split;参数都为(tensor,num,dim)

chunk 控制分割结果多少

split 控制分割数量大小

torch.chunk(x, 3,dim=0):参数1为tnsor对象;参数2为分割成多少个结果(不够数量,则值保留原大小,比如5个内容分为3份(2,2,1),2个内容分两份(1,1));参数3为dim,指定维度分隔

torch.split(x, 3,dim=0):参数1为tnsor对象;参数2为分割数量大小(不够数量,则值保留原大小,比如设置值为3,在原说内容切割3个内容分块,不够数量就只有一块);参数3为dim,指定维度分隔

import torchx = torch.tensor([[1, 2], [4, 5], [7, 8], [10, 11], [13, 14]])
# 分割成3块
print(torch.chunk(x, 3,dim=0))
print(torch.chunk(x, 3,dim=1))# 按照每块大小为4进行分割
print(torch.split(x, 4,dim=0))
print(torch.split(x, 4,dim=1))

7、广播

        两个tensor 直接加法或减法运算时,在某个维度的元素个数相等;某个tensor维度元素个数全是1;全部维度元素个数相等

全部相等:直接对应元素计算

某个维度相等,某个tenser其余维度元素个数全是1:将其广播到另一个tensor维度个数大小(复制1那个内容数据)在进行计算

若某个tensoru维度元素个数全为1,则广播值对应tensor维度个数

import torch# 某些维度相等,剩下维度个数为1
data1d = torch.tensor([[[1,1,1,1]],[[1,1,1,1]]])
data2d = torch.tensor([[[11,11,11,11], [22,22,22,22]],[[11,11,11,11], [22,22,22,22]]])
print(data1d.shape, data2d.shape)
# 进行计算:会自动进行广播机制
print(data1d + data2d)# 某些维度相等,剩下维度个数为1
data1d = torch.tensor([[[1,1,1,1]]])
data2d = torch.tensor([[[11,11,11,11], [22,22,22,22]],[[11,11,11,11], [22,22,22,22]]])
print(data1d.shape, data2d.shape)
# 进行计算:会自动进行广播机制
print(data1d + data2d)# 一个rensor维度个数全为1
data1d = torch.tensor([[1]])
data2d = torch.tensor([[[11,11,11,11], [22,22,22,22]],[[11,11,11,11], [22,22,22,22]]])
print(data1d.shape, data2d.shape)
# 进行计算:会自动进行广播机制
print(data1d + data2d)

8、数据的函数运算

floor:向左取值;ceil:向右取值;round:四舍五入;trunc:保留整数;frac:保留小数;fix:向零方向取整数;abs:取绝对值;取余%:-3%2 结果为 1

import torch
data = torch.tensor([[1,2,-3.5],[4,5.1,6.5],[7.3,8,9.5],[10,11.8,-12.5]]
)
print(data)x1 = torch.floor(data) # 向左取值
print(x1)x1 = torch.ceil(data) # 向右取值
print(x1)# 使用python的round()函数
# 四舍六入,五看整数位数的奇偶性,奇进偶不进
x1 = torch.round(data) # 使用python的round()函数    
print(x1)x1 = torch.trunc(data) # 只保留整数部分   
print(x1)x1 = torch.frac(data) # 只保留小数部分  
print(x1)x1 = torch.fix(data) # 向零方向保留整数(整数操作floor,负数操作ceil)
print(x1)x1 = data%2  # 取余  整数减,负数加
print(x1)x1 = torch.abs(data)  # 取绝对值
print(x1)

9、张量保存与加载

save 和  load 

import torch 
x = torch.tensor([1, 2 ,3])# save 保存到本地
torch.save(x, '../../data/tengsor_save.pt')# load 加载本地保存文件
x = torch.load("../../data/tengsor_save.pt",torch.device('cuda') )
print(x.device)

10、并行化

get_num_threads 查看;set_num_threads 设置

        线程数设置过高可能会导致线程竞争,反而降低性能;设置过低可能会导致计算资源未得到充分利用;当使用 GPU 进行计算时,线程数设置对性能影响较小,因为 GPU 计算并不依赖于 CPU 线程数

import torch
print(torch.get_num_threads())torch.set_num_threads(4)
print(torch.get_num_threads())

相关文章:

深度学习2

四、tensor常见操作 1、元素值 1.1、获取元素值 tensor.item() 返回tensor的元素;只能在一个元素值使用,多个报错,当存在多个元素值时需要使用索引进行获取到一个元素值时在使用 item。 1.2、元素值运算 tensor对元素值的运算:…...

工业生产安全-安全帽第二篇-用java语言看看opencv实现的目标检测使用过程

一.背景 公司是非煤采矿业,核心业务是采选,大型设备多,安全风险因素多。当下政府重视安全,头部技术企业的安全解决方案先进但价格不低,作为民营企业对安全投入的成本很敏感。利用我本身所学,准备搭建公司的…...

单片机学习笔记 9. 8×8LED点阵屏

更多单片机学习笔记:单片机学习笔记 1. 点亮一个LED灯单片机学习笔记 2. LED灯闪烁单片机学习笔记 3. LED灯流水灯单片机学习笔记 4. 蜂鸣器滴~滴~滴~单片机学习笔记 5. 数码管静态显示单片机学习笔记 6. 数码管动态显示单片机学习笔记 7. 独立键盘单片机学习笔记 8…...

c++ 力扣题(1)JZ64

JZ64求123...n_牛客题霸_牛客网 因此不能使用等差求和(禁掉位运算为了禁掉等差求和,右移一位就是等差除二)、循环、递归来解决 我们运用到在 统计构造次数所学到的内容: 1.可以利用静态全局变量的思想来做 2.构造n次对象&…...

logback动态获取nacos配置

文章目录 前言一、整体思路二、使用bootstrap.yml三、增加环境变量四、pom文件五、logback-spring.xml更改总结 前言 主要是logback动态获取nacos的配置信息,结尾完整代码 项目springcloudnacosplumelog,使用的时候、特别是部署的时候,需要改环境&#…...

基于零相差前馈补偿的 PID 控制

零相差前馈补偿是一种结合前馈补偿与反馈控制的策略,旨在提高控制系统对参考信号的跟踪精度。通过设计合理的前馈补偿器,使得系统对参考输入实现零相位差的跟踪,同时利用 PID 控制器保证系统的稳定性和动态性能。 1. 原理概述 目标&#xff…...

任务通知的本质(任务通知车辆运行) 软件定时器的本质(增加游戏音效)

任务通知的本质 没有任务通知 所谓"任务通知",你可以反过来读"通知任务"。 我们使用队列、信号量、事件组等等方法时,并不知道对方是谁。使用任务通知时,可 以明确指定:通知哪个任务。 使用队列、信号量、…...

如何在 MySQL 中进行数据导入和导出?

在 MySQL 中进行数据的导入和导出是一项常见的任务,用于数据备份、恢复、迁移以及数据分析等多种用途。MySQL 提供了多种方法来进行数据的导入和导出,每种方法都有其适用的场景和特点。以下是几种常用的 MySQL 数据导入和导出方法,包括命令行…...

python语言基础-5 进阶语法-5.3 流式编程

声明:本内容非盈利性质,也不支持任何组织或个人将其用作盈利用途。本内容来源于参考书或网站,会尽量附上原文链接,并鼓励大家看原文。侵删。 5.3 流式编程(参考链接:https://www.zhihu.com/question/59062…...

centos 服务器 docker 使用代理

宿主机使用代理 在宿主机的全局配置文件中添加代理信息 vim /etc/profile export http_proxyhttp://127.0.0.1:7897 export https_proxyhttp://127.0.0.1:7897 export no_proxy"localhost,127.0.0.1,::1,172.171.0.0" docker 命令使用代理 例如我想在使用使用 do…...

[个人专属博客] - docker安装

🎉🎉🎉🎉🎉🎉 欢迎访问的个人博客:http://swzbk.site/,加好友,一起赚🧧🧧🧧 🎉🎉🎉🎉&…...

推荐一个QDirStat基于 Qt 的目录统计工具

QDirStat 是一款基于 Qt 的目录统计工具,旨在帮助用户分析磁盘空间使用情况并进行清理。QDirStat的一些主要特点和功能: 跨平台兼容性:QDirStat 支持 Linux、BSD、Unix-like 系统以及 macOS,确保了广泛的用户基础。 直观的数据展…...

yolo自动化项目实例解析(九) 导航

比如我们经常使用的导航,说白了就是寻找两点之间最近的路径,也就是所谓的寻路,我们需要想办法让程序知道他要去哪里,路径包含(起点、轨迹、终点) 一、录制轨迹 从平面角度来看,我们可以把区域视…...

MySQL 报错:1137 - Can‘t reopen table

MySQL 报错&#xff1a;1137 - Can’t reopen table 1. 问题 对临时表查询&#xff1a; select a.ts_code,a.tsnum,b.tsnum from (select t.ts_code ,count(*) tsnum from tmp_table t group by t.ts_code having count(*) > 20 and count(*)< 50 ) a ,(select t.ts_…...

Bokeh实现大规模数据可视化的最佳实践

目录 引言 一、Bokeh简介 二、安装Bokeh 三、数据准备 四、性能优化 五、创建图表 六、添加交互功能 七、应用案例 八、高级技巧 九、总结 引言 在数据科学领域,数据可视化是一个至关重要的环节。通过可视化,我们可以直观地理解数据的特征和趋势,为数据分析和决策…...

HTMLCSS:比赛记分卡

效果演示 这段 HTML 和 CSS 代码创建了一个卡片式的体育比赛信息展示组件&#xff0c;用于显示篮球比赛的两个队伍名称、比赛时间、比分以及一些装饰性的视觉元素。 HTML <div class"card"><div data-status"inprogress" class"teams"…...

什么是 Faiss?

好的&#xff0c;我来详细解释 Faiss&#xff0c;它的用途、使用场景&#xff0c;以及如何安装和使用。 什么是 Faiss&#xff1f; Faiss 是由 Facebook AI Research 开发的一个开源库&#xff0c;专门用于高效的相似性搜索和聚类。它非常擅长在高维向量空间中进行快速搜索&a…...

【prism】遇到一个坑,分享!

背景 我通用prism的方式写了一个弹窗,弹窗绑定一个 Loaded 事件,但是Loaded事件一直不触发!!! 具体过程 我的loaded事件也是通过命令的方式绑定的: <i:Interaction.Triggers><i:EventTrigger EventName="Loaded...

vue制作代码比较工具

前两天朋友问我 有没有vue可以做一个json代码在线比较工具 我也是在网上搜了一下找到的 废话不说 直接上代码 采用 v3 pnpm i v-code-diff <div><CodeDiff:old-string"oldStr":new-string"newStr"output-format"side-by-side"/>…...

GPT系列文章

GPT系列文章 GPT1 GPT1是由OpenAI公司发表在2018年要早于我们之前介绍的所熟知的BERT系列文章。总结&#xff1a;GPT 是一种半监督学习&#xff0c;采用两阶段任务模型&#xff0c;通过使用无监督的 Pre-training 和有监督的 Fine-tuning 来实现强大的自然语言理解。在 Pre-t…...

Qt实现可拖拽的矩形

之前项目上需要用Qt来绘制可拖拽改变形状的矩形。看了Qt Graphics相关的内容&#xff0c;虽然对Qt怎么添加图元的有了些了解&#xff0c;但是具体如何实现拖拽效果&#xff0c;一时也没有什么好的想法。还好网上有人分享的例子&#xff0c;很受启发。后来又回顾了一下这部分的代…...

python爬虫初体验(五)—— 边学边玩小游戏

1. 打开浏览器 利用webbrowser 模块的 open()函数可以启动一个新浏览器&#xff0c;打开指定的 URL。 import webbrowser webbrowser.open(http://inventwithpython.com/) 2. 猜数字游戏 # -*- coding: utf-8 -*- # This is a guess the number game. import randomsecretN…...

学习日志015--python单链表

创建 class Node:def __init__(self,data):# 数据域self.data data# 链接域self.next Noneclass LinkList:def __init__(self,):# 初始化头节点self.head None# 记录链表的长度self.size 0 增加 #头插def insert_head(self,value):# 创建新节点node Node(value)q self…...

51WORLD与南京水利研究院联合研发,国产数字孪生超融合一体机

近日&#xff0c;太湖流域水治理国际会议在江苏省无锡市举行。大会由水利部国际合作与科技司、河湖管理司、中国水利学会、水利部太湖流域管理局、无锡市人民政府、中国交通建设集团有限公司指导&#xff0c;南京水利科学研究院主办&#xff0c;以“践行新发展理念、推进流域水…...

自动泊车变自动撞车?小米SU7遭遇批量事故

科技新知 原创作者丨依蔓 编辑丨蕨影 小米系统bug&#xff0c;70多辆小米SU7同一天自动泊车撞墙、撞柱&#xff01; 近日&#xff0c;多名车主反映小米汽车SU7标准版“自动泊车”功能出现故障&#xff0c;造成不同程度的撞击、剐蹭损伤。 小米客服此前回应涉事车主&#xff0…...

异常和中断

在计算机系统中&#xff0c;异常和中断是两种常见的用于处理异步事件的机制。以下是常见的异常和中断及其特点的详细解释&#xff1a; 异常&#xff08;内中断&#xff09; 异常&#xff0c;也称为内中断&#xff0c;是由CPU内部事件引起的中断。异常通常与程序执行的当前指令…...

代理IP在后端开发中的应用与后端工程师的角色

目录 引言 代理IP的基本概念和工作原理 代理IP在后端开发中的应用 网络爬虫与数据采集 负载均衡与性能优化 安全防护与隐私保护 后端工程师在使用代理IP时面临的挑战 结论 引言 在数字化时代&#xff0c;网络技术的飞速发展极大地推动了各行各业的发展。其中&#xff…...

设计模式之 观察者模式

观察者模式&#xff08;Observer Pattern&#xff09;是一种行为型设计模式&#xff0c;它定义了一种一对多的依赖关系&#xff0c;让多个观察者对象同时监听一个主题对象&#xff08;Subject&#xff09;。当主题对象的状态发生变化时&#xff0c;所有依赖于它的观察者都会得到…...

SQLSever显示物理和逻辑 IO活动量的相关信息及显示分析、编译和执行各语句所需的毫秒数。

SQLSever SET STATISTICS IO显示物理和逻辑 IO活动量的相关信息及SET STATISTICS TIME显示分析、编译和执行各语句所需的毫秒数。 1、 SET STATISTICS IO (Transact-SQL) 物理 IO 与访问磁盘上的数据页相关&#xff0c;逻辑 IO 与访问内存中的数据页&#xff08;数据缓存&…...

CSS3 动画:前端开发的动态美

CSS3 动画:前端开发的动态美 CSS3 动画是现代网页设计中不可或缺的一部分,它为静态的网页元素添加了动态效果,提升了用户体验。本文将深入探讨CSS3动画的基础知识、高级技巧,并展示如何在实际项目中应用这些动画。 CSS3 动画基础 CSS3动画主要通过@keyframes和动画属性(…...

JavaWeb之综合案例

前言 这一节讲一个案例 1. 环境搭建 然后就是把这些数据全部用到sql语句中执行 2.查询所有-后台&前台 我们先写后台代码 2.1 后台 2.2 Dao BrandMapper&#xff1a; 注意因为数据库里面的名称是下划线分割的&#xff0c;我们类里面是驼峰的&#xff0c;所以要映射 …...

基于Spring Boot+Unipp的博物馆预约小程序(协同过滤算法、二维码识别)【原创】

&#x1f388;系统亮点&#xff1a;协同过滤算法、二维码识别&#xff1b; 一.系统开发工具与环境搭建 1.系统设计开发工具 后端使用Java编程语言的Spring boot框架 项目架构&#xff1a;B/S架构 运行环境&#xff1a;win10/win11、jdk17 前端&#xff1a; 技术&#xff1a;框…...

使用 Maven 构建一个简单的 Java 项目

Apache Maven 是一个强大的构建自动化工具&#xff0c;主要用于 Java 项目。它简化了构建和管理任何基于 Java 的项目的流程。 本指南将涵盖 Maven 的安装、设置一个简单的 Java 项目以及使用 Maven 运行该项目。 1. 安装 安装 Java 在安装 Maven 之前&#xff0c;需要确保…...

【51单片机】LCD1602液晶显示屏

学习使用的开发板&#xff1a;STC89C52RC/LE52RC 编程软件&#xff1a;Keil5 烧录软件&#xff1a;stc-isp 开发板实图&#xff1a; 文章目录 LCD1602存储结构时序结构 编码 —— 显示字符、数字 LCD1602 LCD1602&#xff08;Liquid Crystal Display&#xff09;液晶显示屏是…...

UDP协议

UDP&#xff08;UserDatagramProtocol&#xff09;是一个简单的传输层协议&#xff0c;特点&#xff1a;无连接、不可靠、面向数据包、全双工。 报文结构 1.源端口&#xff1a; 源端口号&#xff0c;需要对方回信时选用&#xff0c;不需要时全部置0. 2.目的端口&#xff1a;目…...

阅读 ADiffusion-Based Framework for Multi-Class Anomaly Detection

A Diffusion-Based Framework for Multi-Class Anomaly Detection 我觉得引言部分写的不错&#xff0c;将问题清楚的讲出来了&#xff0c;值得借鉴&#xff01;&#xff01; 摘要 基于重建的方法在异常检测方面取得了显著成果。最近流行的扩散模型的卓越图像重建能力引发了研…...

网络云计算】2024第47周-每日【2024/11/21】周考-实操题-RAID6实操解析1

文章目录 1、RAID6配置指南&#xff08;大致步骤&#xff09;2、注意事项3、截图和视频 网络云计算】2024第47周-每日【2024/11/21】周考-实操题-RAID6实操 RAID6是一种在存储系统中实现数据冗余和容错的技术&#xff0c;其最多可以容忍两块磁盘同时损坏而不造成数据丢失。RAID…...

ts- declare关键词及vue3报错“Window typeof globalThis”上不存在属性“nextLoading”、`

报错“Window & typeof globalThis”上不存在属性“nextLoading”、 代码环境&#xff1a;vue3、ts 阮一峰讲解 declarets 用法告诉编译器某个类型是存在的 下面的例子是脚本使用浏览器全局对象document。 declare var document; document.title "Hello";上面…...

【STM32】在 STM32 USB 设备库添加新的设备类

说实话&#xff0c;我非常想吐槽 STM32 的 USB device library&#xff0c;总感觉很混乱。 USB Device library architecture 根据架构图&#xff1a; Adding a custom class 如果你想添加新的设备类&#xff0c;必须修改的文件有 usbd_desc.cusbd_conf.cusb_device.c 需要…...

【单点知识】基于PyTorch讲解自动编码器(Autoencoder)

文章目录 0. 前言1. 自动编码器的基本概念1.1 定义1.2 目标1.3 结构 2. PyTorch实现自动编码器2.1 导入必要的库2.2 定义自动编码器模型2.3 加载数据2.4 训练自动编码器 3. 自动编码器的意义4. 自动编码器的应用4.1 图像处理4.2自然语言处理&#xff1a;4.3推荐系统&#xff1a…...

html+js实现图片的放大缩小等比缩放翻转,自动播放切换,顺逆时针旋转

效果图&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>图片预览</title><sty…...

【蓝桥杯C/C++】翻转游戏:多种实现与解法解析

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: 蓝桥杯C/C 文章目录 &#x1f4af;题目&#x1f4af;问题分析解法一&#xff1a;减法法解法二&#xff1a;位运算解法解法三&#xff1a;逻辑非解法解法四&#xff1a;条件运算符解法解法五&#xff1a;数组映射法不同解法的比较…...

介绍一下toupper(ch);函数(c基础)

hi , I am 36 适合对象c语言初学者 toupper(ch1); tolower(ch2); 是返回ch的大写或小写的字符但并不改变ch 若传递数字仍返回该数字 格式 #include<ctype.h> char res toupper(ch); 链接扫雷游戏代码分享(c基础)-CSDN博客 hi , I am 36. thanks for your look…...

如何使用Python代码实现给GPU预加热

如何使用Python代码实现给GPU预加热 一、引言二、使用深度学习框架进行预加热2.1 TensorFlow预加热2.2 PyTorch预加热三、使用CUDA进行预加热四、预加热的效果评估与优化五、结论与展望在高性能计算和深度学习领域,GPU(图形处理器)已经成为不可或缺的加速工具。然而,在实际…...

基于 SpringBoot 的作业管理系统【附源码】

基于 SpringBoot 的作业管理系统 效果如下&#xff1a; 系统注册页面 学生管理页面 作业管理页面 作业提交页面 系统管理员主页面 研究背景 随着社会的快速发展&#xff0c;信息技术的广泛应用已经渗透到各个行业。在教育领域&#xff0c;课程作业管理是学校教学活动中的重要…...

LeetCode题解:26.删除有序数组中的重复项【Python题解超详细,双指针法】,知识拓展:原地修改

题目描述 给你一个 非严格递增排列 的数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使每个元素 只出现一次 &#xff0c;返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 nums 的唯一元素的数量为 k &…...

docker 容器运行Ruoyi-cloud

1&#xff0c;linux系统安装openjdk1.8,mvn,dokcer,node,git 2&#xff0c;拉取代码 1&#xff09;查看gitee仓库地址 2&#xff09;创建/app文件夹&#xff0c;进入app目录 mkdir /app cd /app 3&#xff09;clone代码 4&#xff09;修改配置文件中nacos地址 # 修改注…...

【Unity How】Unity中如何实现物体的匀速往返移动

直接上代码 using UnityEngine;public class CubeBouncePingPong : MonoBehaviour {[Header("移动参数")][Tooltip("移动速度")]public float moveSpeed 2f; // 控制移动的速度[Tooltip("最大移动距离")]public float maxDistance 5f; // 最大…...

STM32完全学习——系统时钟设置

一、时钟框图的解读 首先我们知道STM32在上电初始化之后使用的是内部的HSI未经过分频直接通过SW供给给系统时钟&#xff0c;由于内部HSI存在较大的误差&#xff0c;因此我们在系统完成上电初始化&#xff0c;之后需要将STM32的时钟切换到外部HSE作为系统时钟&#xff0c;那么我…...

简单理解下基于 Redisson 库的分布式锁机制

目录 简单理解下基于 Redisson 库的分布式锁机制代码流程&#xff1a;方法的调用&#xff1a;具体锁的实现&#xff1a;riderBalance 方法&#xff1a;tryLock 方法&#xff08;重载&#xff09;&#xff1a;tryLock 方法&#xff08;核心实现&#xff09;&#xff1a; 简单理解…...