深度学习(1)
一、torch的安装
基于直接设备情况,选择合适的torch版本,有显卡的建议安装GPU版本,可以通过nvidia-smi
命令来查看显卡驱动的版本,在官网中根据cuda版本,选择合适的版本号,下面是安装示例代码
GPU:
pip install torch==2.5.0 torchvision==0.20.0 torchaudio==2.5.0 --index-url https://download.pytorch.org/whl/cu124
CPU:
pip install torch==2.5.0 torchvision==0.20.0 torchaudio==2.5.0 --index-url https://download.pytorch.org/whl/cpu
!!!,因为torch包很大,有3个G左右,下载时请选择稳定的网络环境,预防因网络波动导致安装失败。
二、tensor简述
PyTorch会将数据封装成张量(Tensor)进行计算,所谓张量就是元素为相同类型的多维矩阵。张量可以在 GPU 上加速运行。
2.1、概述
张量是一个多维数组,通俗来说可以看作是扩展了标量、向量、矩阵的更高维度的数组。张量的维度决定了它的形状(Shape),常见的张量有:
- 标量:0阶张量;
- 向量:1阶张量;
- 矩阵:2阶张量;
- 其他:例如高阶张量、图像、视频等复杂数据结构。
2.2、特点
- 动态计算图
- GPU支持
- 自动微分
2.3、数据类型
PyTorch中有3种数据类型:浮点数、整数、布尔。其中,浮点数和整数又分为8位、16位、32位、64位,加起来共9种。
三、tensor创建---- torch.tensor:根据指定的数据创建张量。
3.1、标量
def th_touchs():# ? 创建一个一阶张量t1 = torch.tensor(5)print(t1.shape) # 打印张量的形状print(t1.dtype) # 打印张量的数据类型print(type(t1)) # 打印张量的类型
3.2、数组
# 数组
data = np.array([1, 2, 3, 4])
x = torch.tensor(data)
print(x)
3.3、列表
# 列表
data = [1,2,3,4]
x = torch.tensor(data)
print(x)
3.4、指定张量的数据类型
data = np.array([1, 2, 3, 4],dtype = int)
x = torch.tensor(data)
print(x)
3.5、指定张量的执行设备
data = np.array([1, 2, 3, 4],divice = "cuda")
x = torch.tensor(data)
print(x)
3.6、其他指定类型张量
"""
创建张量
"""
import torch# ! 创建线性张量
def test_linear():# 左闭右开区间,步长为2x = torch.arange(1, 10, 2)# print(x)#闭区间,自动等差步长y = torch.linspace(1, 10, 4)# print(y)# 等比数列,base表示指数,表示3^1~3^10取5个数z = torch.logspace(1, 10, 10,base=2)# print(z)# ! 创建随机张量
def test_tensor():# 设置随机数种子torch.manual_seed(123)# 获取当前随机数种子# print(torch.initial_seed())# 生成随机张量x = torch.rand(10, 5)# print(x)# 生成正太分布的随机张量y = torch.randn(2, 10)# print(y)# 自定义方差和均值z = torch.normal(mean=10, std=2, size=(2, 2))print(z)# ! 创建0/1张量
def test_zeros():# 创建指定形状的张量x = torch.zeros((4, 4), dtype=torch.int64)# print(x)# 从数据中构建张量,传入的容器只能是tensorx = torch.tensor([[1, 2, 3],[4, 5, 6]])x = torch.rand(3,3)x = torch.zeros_like(x)print(x)def test_ones():# 创建指定形状的张量x = torch.ones((4, 4), dtype=torch.int64)# print(x)# 从数据中构建张量,传入的容器只能是tensorx = torch.tensor([[1, 2, 3],[4, 5, 6]])x = torch.rand(3,3)x = torch.ones_like(x)print(x)# ! 创建指定值张量
def test_full():# 创建指定形状的张量x = torch.full((4, 4), fill_value=7)# print(x)# 从数据中构建张量,传入的容器只能是tensorx = torch.tensor([[1, 2, 3],[4, 5, 6]])x = torch.full_like(x, 11)print(x)# ! 创建单位矩阵张量
def test_eye():# 创建指定形状的张量x = torch.eye(4, 4)print(x)if __name__ == '__main__':test_linear()test_tensor()test_zeros()test_ones()test_full()test_eye()
tensor常用属性
"""
常见属性
"""import torchdef th_tensor():x = torch.tensor([1, 2, 3],device='cuda') # 指定创建到cuda/cpu的tensorprint(x.dtype) # 数据类型print(x.device)# tensor所在的设备,默认是cpuprint(x.shape) # 形状# 设备切换
def device_change():# 方式1# 将tensor创建在cuda设备上x = torch.tensor([1, 2, 3], device='cuda')# print(1,x.device)# 方式2# 先创建一个cpu上的tensorx = torch.tensor([1, 2, 3])# 将tensor移动到cuda设备上x = x.to('cuda:0')# print(2,x.device)# 通过api获取设备是否有cuda# 检查CUDA是否可用res = torch.cuda.is_available()print(res)# 条件判断c = 1 if 100>10 else 0print(c)# 根据CUDA可用性将tensor移动到cuda或cpu设备上x.to("cuda" if torch.cuda.is_available() else "cpu")print(x.device)# 方式3# 创建一个cpu上的tensorx = torch.tensor([1, 2, 3])print(x.device)# 把tensor移动到cuda上y = x.cuda() # 把tensor移动到cuda上print(y.device)# 根据CUDA可用性将tensor移动到cuda或cpu设备上x = x.cuda() if torch.cuda.is_available() else x.cpu()# 类型转换
def type_convert():# 直接指定tensor的数据类型x = torch.tensor([1, 2, 3], dtype=torch.float64)print(x.dtype)# 通过type方法转换tensor的数据类型x = x.type(torch.int8)print(x.dtype)# 通过half方法转换tensor的数据类型x = x.half()print(x.dtype)# 通过double方法转换tensor的数据类型x = x.double()print(x.dtype)# 通过float方法转换tensor的数据类型x = x.float()print(x.dtype)# 通过int方法转换tensor的数据类型x = x.int()print(x.dtype)if __name__ == '__main__':# print(th_tensor())# device_change()type_convert()
五、tensor数据类型转换
5.1、常规数据类型转换
import numpy as np
import torchdef th_data_np():x = torch.tensor([1, 2, 3])print(x)# 把Tensor转换为numpy数组x1 = x.numpy()print(x1)print(type(x1))# x 和x1 是两个不同的对象,但它们都指向同一个数据存储空间x1[0] = 100print(x)def th_data_copy():x = torch.tensor([1, 2, 3])print(x)# 把Tensor转换为numpy数组并copy,copy()不会改变原来的数据x1 = x.numpy().copy() # 注意这里是copy(深拷贝),还有一个view(浅拷贝)print(x1)print(type(x1))x1[0] = 100print(x)print(x1)def th_data_np_tensor():# np转tensor,不共用内存(浅拷贝)x = np.array([1, 2, 3])print(x)# 把numpy数组转换为Tensorx1 = torch.tensor(x)x[0] = 100x1[0] = 200print(x)print(x1)# from_numpy()会和原来的数组共享内存(深拷贝)x2 = np.array([1, 2, 3])x3 = torch.from_numpy(x2)x2[0] = 100x3[1] = 200print(x2)print(x3)if __name__ == '__main__':# th_data_np()# th_data_copy()th_data_np_tensor()
5.2、图片数据类型转换
from PIL import Image
import torch
from torchvision import transformsdef tensor_to_img():pass# ? 将图像转换为张量
def img_to_tensor():path = './data/1.png'img = Image.open(path)print(img)transfer = transforms.ToTensor()img_tensor = transfer(img)print(img_tensor.shape)# ? 将张量转换为图像
def test():# r = torch.rand(315,315)# g = torch.rand(315,315)# b = torch.rand(315,315)img_tensor = torch.rand(4,315,315)# print(img_tensor)# print(img_tensor.shape)# tensor转PIL对象transfer = transforms.ToPILImage()img = transfer(img_tensor)img.show()def test2():prth = r"./data/1.png"img = Image.open(prth)print(img)transfer = transforms.ToTensor()img_tensor = transfer(img)img_tensor[0] = 255tensor2pil = transforms.ToPILImage()img_pil = tensor2pil(img_tensor)img_pil.show()img_pil.save('./data/2.png')if __name__ == "__main__":# img_to_tensor(# test()test2()
六、tensor常见操作
6.1、获取元素
"""
从tensor中获取元素
"""import torchdef th_items():# 标量x = torch.tensor(1)print(x.item())# 一阶x = torch.tensor([100])print(x.item())# ! 如果输入的数据大于一个,会报错x = torch.tensor([1, 2])# print(x.item())if __name__ == '__main__':th_items()
6.2、元素值运算
"""
元素值运算
"""
import torchdef th_cction():torch.manual_seed(666)x = torch.randint(1, 10, (3, 3))print(x)# ? 加x1 = x.add(100)print(x1)# !带_结尾的函数,基本上都是在原数据进行操作x.add_(200)print(x)# ? 减x2 = x.sub(50)print(x2)x.sub_(40)print(x)# ? 乘x3 = x.mul(2)print(x3)x.mul_(2)print(x)# ? 除x4 = x.div(2)print(x4)x.div_(2)print(x)# ? 幂x5 = x.pow(2)print(x5)x.pow_(2)print(x)# ?x6 = x**2print(x6)if __name__ == '__main__':th_cction()
6.3、阿达玛积
"""
计算阿达玛积"""
import torchdef adama():x1 = torch.tensor([[1,2],[3,4]])x2 = torch.tensor([[1,2],[3,4]])#! Adama积矩阵形状必须相同x3 = x1 * x2print(x3)if __name__ == '__main__':adama()
6.4、相乘
"""
矩阵相乘
"""import torchdef dot():x1 = torch.tensor([[1,2],[3,4]])x2 = torch.tensor([[1,2],[3,4]])x3 = torch.matmul(x1, x2)x3 = x1.matmul(x2)x3 = x1 @ x2x3 = x1.mm(x2)print(x3)if __name__ == '__main__':dot()
6.5、索引
"""
索引
"""import torchdef index():# tensor 的布尔运算# torch.manual_seed(66)# x = torch.randint(0, 10, (5, 5))# print(x)# x1 = x > 7# print(x1)# x3 = x[x1]# print(x3)# print(x[x % 2 == 0])# 创建一个5x5的tensor作为示例数据x = torch.tensor([[2, 3, 2000, 10, 20], # 满足条件:偶数,奇数,闰年[1, 2, 2001, 30, 40], # 不满足条件:第一列是奇数[4, 5, 2004, 50, 60], # 满足条件:偶数,奇数,闰年[3, 7, 1900, 70, 80], # 不满足条件:第三列不是闰年(虽然能被4整除,但也能被100整除且不能被400整除)[6, 9, 1600, 90, 100] # 满足条件:偶数,奇数,闰年])# 找出第一列是偶数,第二列是奇数,第三列是闰年的行中的第四列和第五列的数据print(x[(x[:, 0] % 2 == 0) & (x[:, 1] % 2 != 0) & ((x[:, 2] % 4 == 0) | (x[:, 2] % 400 == 0))][:, [3, 4]])# ? 索引赋值
def index_ass():torch.manual_seed(66)x = torch.randint(1,10,(5, 5))print(x)x1 = x[1,1]print(x1)x[1,1] = 100print(x)x[:,3] = 200print(x)x[:,:] = 300print(x)x.fill_(400)print(x)if __name__ == "__main__":# index()index_ass()
6.6、拼接
"""
拼接
"""import torch
from PIL import Image
from torchvision import transformsdef montage_cat():x = torch.randint(1, 10, (3,3))y = torch.randint(1, 10, (3,3))print(x)print(y)# cat():不会增加维度# 拼接,dim=0:按行拼接,dim=1:按列拼接z = torch.cat([x, y], dim=0)print(z)def montage_stack():torch.manual_seed(66)x = torch.randint(1, 10, (3,3))y = torch.randint(1, 10, (3,3))# print(x)# print(y)# ! stack():会增加维度(张量级别)# ! 堆叠,dim=0:按行堆叠,dim=1:按列堆叠# ! 要堆叠的张量必须具有相同的形状z = torch.stack([x, y],dim=1)print(z)def montage_img():# 加载本地图像为PILimg = Image.open('./data/1.png')transfer = transforms.ToTensor()img_tensor = transfer(img)# print(img_tensor)# print(img_tensor.shape)res = torch.stack([img_tensor[0], img_tensor[1],img_tensor[2]], dim=0)if __name__ == '__main__':# montage_cat()# montage_stack()montage_img()
6.7、形状
"""
形状操作
"""import torchdef th_reshape():x = torch.reshape(x, (-1, 5))x1 = torch.reshape(x, (2, 6))print(x)x2 = torch.reshape(x, (2, 3, 2))print(x2)def th_view():x = torch.randint(1, 10,(4, 3))# print(x)# !改变形状,由于没有改变原x中的内存空间,因此改变形状操作比reshape快x1 = x.view((2, 6))# print(x1)# x2 = torch.randit(1, 10,(4, 3))# # x3 = torch.reshape(x2, (2, 6))# x4 = x2.t() # 转置矩阵# print(x4)# # !改变形状,在内存中不连续的数据不能通过view转换# x5 = x4.view(2,6)# print(x5)# ! 改变形状后,是否共享数据内存x6 = torch.randint(1, 10, (4, 3))x7 = x6.view(2, 6)x6[1,1] = 999print(x6)print(x7)# ? 改变维度0
def rh_transpose():x1 = torch.randint(1, 10, (4, 3))print(x1,x1.shape)# ! transpose(x, dim0, dim1), 交换两个维度x2 = torch.transpose(x1, 0, 1)print(x2,x2.shape)# ? 改变维度1
def th_permute():x1 = torch.randint(0, 255, (3, 512,360))print(x1.shape)x2 = x1.permute(1, 2, 0)print(x2.shape)# ? 改变为1维
def th_flatten():x1 = torch.randint(0, 255, (4, 3))# print(x1)x2 = x1.flatten()# print(x2)x3 = torch.randint(0, 255, (3, 4, 2, 2))print(x3)x4 = x3.flatten(start_dim=1, end_dim=-1)print(x4)# ? 数据升维
def th_unsqueeze():x1 = torch.randint(0, 255, (4, 3))print(x1)# ! 0,表示在0处插入一个维度x2 = x1.unsqueeze(0)print(x2.shape)# ? 数据降维
def th_squeeze():x1 = torch.randint(0, 255, (1, 4, 3, 1))print(x1)x2 = x1.squeeze()print(x2)x3 = x1.squeeze(0).squeeze(-1)print(x3)# ? 数据分割
def th_split():x1 = torch.randint(0, 255, (4, 3))print(x1)# ! split(),表示每个tensor有2行x2, x3 = torch.split(x1, 2)# print(x2, x3)# ! chunk(),表示将数据分割成多少份x4 = torch.chunk(x1, 4)print(x4)# ? 广播
def th_broadcast():a = torch.arange(1, 13).reshape(3, 4)b = torch.arange(1, 5)c = a + bif __name__ == '__main__':# th_reshape()# th_view()# rh_transpose()# th_permute()# th_flatten()# th_unsqueeze()# th_squeeze()# th_split()th_broadcast()
```
相关文章:
深度学习(1)
一、torch的安装 基于直接设备情况,选择合适的torch版本,有显卡的建议安装GPU版本,可以通过nvidia-smi命令来查看显卡驱动的版本,在官网中根据cuda版本,选择合适的版本号,下面是安装示例代码 GPUÿ…...
golang 嵌入式armv7l压缩编译打包
编译 Go 应用程序 go build -ldflags"-s -w" -o myapp.exe . 使用 UPX 压缩可执行文件(window下载并设置环境变量) upx --best --lzma myapp.exe 可从10M压缩到1M 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 …...
Makefile 之 join
join $(join <list1>,<list2> ) 名称:连接函数——join。 功能:把<list2>中的单词对应地加到<list1>的单词后面。如果<list1>的单词个数要比<list2>的多, 那么,<list1>中的多出…...
集合卡尔曼滤波(Ensemble Kalman Filter),用于二维滤波(模拟平面上的目标跟踪),MATLAB代码
集合卡尔曼滤波(Ensemble Kalman Filter) 文章目录 引言理论基础卡尔曼滤波集合卡尔曼滤波初始化预测步骤更新步骤卡尔曼增益更新集合 MATLAB 实现运行结果3. 应用领域结论 引言 集合卡尔曼滤波(Ensemble Kalman Filter, EnKF)是…...
北京申请中级职称流程(2024年)
想找个完整详细点的申请流程资料真不容易,做个分享送给需要的人吧。 不清楚为什么说文章过度宣传,把链接和页面去掉了,网上自己找一下。 最好用windows自带的EDGE浏览器打开申请网站,只有在开始申请的时间内才可以进行网上申报&…...
ubuntu.24安装cuda
1.下载CUDA Toolkit https://developer.nvidia.com/cuda-toolkit-archive 2.按照命令下载,安装 sudo sh cuda_12.2.2_535.104.05_linux.run 3.环境变量 sudo vi /etc/profile 最后面添加 export PATH“/usr/local/cuda-12.2/bin: P A T H " e x p o r t L D L…...
unity li2cpp逆向原理是什么?
主要涉及将Unity游戏引擎中的C#代码转换为C代码,并进一步编译为各平台的原生(Native)代码的过程,以及逆向工程工具如何利用这一过程中的特定文件来还原和分析原始代码。以下是对Unity IL2CPP逆向原理的详细解释: 对惹…...
Python网络爬虫实践案例:爬取猫眼电影Top100
以下是一个Python网络爬虫的实践案例,该案例将演示如何使用Python爬取猫眼电影Top100的电影名称、主演和上映时间等信息,并将这些信息保存到TXT文件中。此案例使用了requests库来发送HTTP请求,使用re库进行正则表达式匹配,并包含详…...
卷积神经网络(CNN)中的权重(weights)和偏置项(bias)
在卷积神经网络(CNN)中,权重(weights)和偏置项(bias)是两个至关重要的参数,它们在网络的学习和推断过程中起着关键作用。 一、权重(Weights) 1. 定义…...
华为FusionCube 500-8.2.0SPC100 实施部署文档
环境: 产品:FusionCube 500版本:8.2.0.SPC100场景:虚拟化基础设施平台:FusionCompute两节点 MCNA * 2硬件部署(塔式交付场景)免交换组网(配置AR卡) 前置准备 组网规划 节…...
Android 网络请求(二)OKHttp网络通信
学习笔记 OkHttp 是一个非常强大且流行的 HTTP 客户端库,广泛用于 Android 开发中进行网络请求。与 HttpURLConnection 相比,OkHttp 提供了更简单、更高效的 API,特别是在处理复杂的 HTTP 请求时。 如何使用 OkHttp 进行网络请求 以下是使…...
npm上传自己封装的插件(vue+vite)
一、npm账号及发包删包等命令 若没有账号,可在npm官网:https://www.npmjs.com/login 进行注册。 在当前项目根目录下打开终端命令窗口,常见命令如下: 1、登录命令:npm login(不用每次都重新登录࿰…...
如何在Word文件中设置水印以及如何禁止修改水印
在日常办公和学习中,我们经常需要在Word文档中设置水印,以保护文件的版权或标明文件的机密性。水印可以是文字形式,也可以是图片形式,能够灵活地适应不同的需求。但仅仅设置水印是不够的,有时我们还需要确保水印不被随…...
.NET桌面应用架构Demo与实战|WPF+MVVM+EFCore+IOC+DI+Code First+AutoMapper
目录 .NET桌面应用架构Demo与实战|WPFMVVMEFCoreIOCDICode FirstAutoPapper技术栈简述项目地址:功能展示项目结构项目引用1. 新建模型2. Data层,依赖EF Core,实现数据库增删改查3. Bussiness层,实现具体的业务逻辑4. Service层&am…...
el-table根据指定字段合并行和列+根据屏幕高度实时设置el-table的高度
文章目录 html代码script代码arraySpanMethod.js代码 html代码 <template><div class"rightBar"><cl-table ref"tableData"border :span-method"arraySpanMethod" :data"tableData" :columns"columns":max-…...
图像处理 之 凸包和最小外围轮廓生成
“ 最小包围轮廓之美” 一起来欣赏图形之美~ 1.原始图片 男人牵着机器狗 2.轮廓提取 轮廓提取 3.最小包围轮廓 最小包围轮廓 4.凸包 凸包 5.凸包和最小包围轮廓的合照 凸包和最小包围轮廓的合照 上述图片中凸包、最小外围轮廓效果为作者实现算法生成。 图形几何之美系列&#…...
萤石设备视频接入平台EasyCVR私有化视频平台视频监控系统的需求及不同场景摄像机的选择
在现代社会,随着安全意识的提高和技术的进步,安防监控视频系统已成为保障人们生活和财产安全的重要工具。EasyCVR安防监控视频系统,以其先进的网络传输技术和强大的功能,为各种规模的项目提供了一个高效、可靠的监控解决方案。以下…...
网络安全之接入控制
身份鉴别 定义:验证主题真实身份与其所声称的身份是否符合的过程,主体可以是用户、进程、主机。同时也可实现防重放,防假冒。 分类:单向鉴别、双向鉴别、三向鉴别。 主题身份标识信息:密钥、用户名和口令、证书和私钥 Internet接入控制过程 …...
Sqlite: Java使用、sqlite-devel
这里写目录标题 一、简介二、使用1. Java项目中(1)引入驱动(2)工具类(3)调用举例 2. sqlite-devel in linuxsqlite-devel使用 三、更多应用1. 数据类型2. 如何存储日期和时间3. 备份 一、简介 非常轻量级&…...
京东面试题目分享
话不多说,直接上问题 一面(视频面) 1小时30分钟 1、类加载机制概念、加载步骤、双亲委托机制、全盘委托机制、类加载器种类及继承关系 2、如何实现让类加载器去加载网络上的资源文件?怎么自定义类加载器?自定义的加…...
STM32 使用 STM32CubeMX HAL库实现低功耗模式
STM32 使用 HAL 库的低功耗模式测试使用 ...... 矜辰所致前言 上次画了一个 STM32L010F4 最小系统的板子,也做了一些基本测试,但是最重要的低功耗一直拖到现在,以前在使用 STM32L151 的时候用标准库做过低功耗的项目,现在都使…...
技术美术百人计划 | 《2.1 色彩空间介绍》笔记
总览 一、色彩发送器 色彩认知: 光源是出生点,光源发射出光线,光线通过直射反射折射等路径最终进入人眼。 但人眼接收到光线后,人眼的细胞产生了一系列化学反应。 由此把产生的信号传入大脑,最终大脑对颜色产生了认…...
如何在 Ubuntu 上安装 Mosquitto MQTT 代理
如何在 Ubuntu 上安装 Mosquitto MQTT 代理 Mosquitto 是一个开源的消息代理,实现了消息队列遥测传输 (MQTT) 协议。在 Ubuntu 22.04 上安装 MQTT 代理,您可以利用 MQTT 轻量级的 TCP/IP 消息平台,该平台专为资源有限的物联网 (IoT) 设备设计…...
css使用弹性盒,让每个子元素平均等分父元素的4/1大小
css使用弹性盒,让每个子元素平均等分父元素的4/1大小 原本: ul {padding: 0;width: 100%;background-color: rgb(74, 80, 62);display: flex;justify-content: space-between;flex-wrap: wrap;li {/* 每个占4/1 */overflow: hidden;background-color: r…...
设计模式的学习思路
学习设计模式确实需要一定的时间和实践,尤其是对于刚入门的人来说,因为一开始可能会感到有些混淆,尤其是当多个设计模式看起来有相似之处时。本博客是博主学习设计模式的思路历程,大家可以一起学习进步。设计模式学习-CSDN博客 1…...
stereopy 查看 data.tl 的可用属性
为了查看 data.tl 的可用属性,您可以使用 Python 的内置函数,例如 dir() 或 vars(),具体操作如下: 1. 列出 data.tl 的所有属性 使用 dir() 来查看所有可用的属性和方法: # 列出所有属性 print(dir(data.tl))这将返回一个列表,包含所有可用的方法、属性和内部字段。 2.…...
【2024APMCM亚太杯A题】详细解题思路
A题 复杂场景下的水下图像增强研究 解题思路问题一图像统计分析技术一、检测 偏色 的技术二、检测 弱光 的技术三、检测 模糊 的技术 聚类算法 问题二问题三问题四完整论文与代码 解题思路 问题一 问题 1:请使用类似上文提到的图像统计分析技术,对附件 …...
用 React18 构建Tic-Tac-Toe(井字棋)游戏
下面是一个完整的 Tic-Tac-Toe(井字棋)游戏的实现,用 React 构建。包括核心逻辑和组件分离,支持两人对战。 1. 初始化 React 项目: npx create-react-app tic-tac-toe cd tic-tac-toe2.文件结构 src/ ├── App.js…...
数据结构及算法--排序篇
在 C 语言中,可以通过嵌套循环和比较运算符来实现常见的排序算法,比如冒泡排序、选择排序或插入排序 目录 基础算法: 1.冒泡排序(Bubble Sort) 2.选择排序(Selection Sort) 3.插入排序&…...
泷羽sec学习打卡-网络七层杀伤链1
声明 学习视频来自B站UP主 泷羽sec,如涉及侵权马上删除文章 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负 关于蓝队基础的那些事儿-Base1 基本的企业网络架构是怎样的呢?高层管理IT管理影子IT中央技术…...
广州市网站设计公司/seo外贸推广
现在大多数手游厂商都不会通过检测来判断封号,可是还是需要普及一些关于防封和被封的干货,否则工作室菜鸟被封得摸不着头脑,也可以试着通过修改信息来做到未雨绸缪。但是小编在此强调,以下分享的经验并不能做到百分百防封哦! 第一…...
怎么自己的电脑做网站/seo优化思路
在我们的系统中,有很多默认的共享是开启的,可以设置一个bat文件在每次开机的时候把共享删除。 net share c$ /del net share d$ /del net share e$ /del net share ADMIN$ /del net share IPC$ /del net share print$ /del net share SYSVOL$ /del net s…...
商场网站建设公司/推广公司哪家好
https://aws.amazon.com/cn/compliance/gdpr-center/...
网站开发用什么写/我有广告位怎么找客户
今天主要给大家带来一个小型公司的网络搭建,保证每一台计算机都可以访问www.ntd1711.com。 实验名称:小型公司网络的搭建 实验拓扑:实验目的:确保每个终端可以访问www.ntd1711.com(192.168.30.88)地址规划&…...
wordpress 公司建站/长沙网站推广和优化
动态路由OSPF协议!一.OSPF基本概念1.OSPF简介2.OSPF的基本特点3.Router-ID4.OSPF Cost二.OSPF的三张表1.邻居表(peer table)2.链路状态数据库(LSDB)3.OSPF路由表(Routing table)三.OSPF五种报文1.OSPF Hell…...
合肥建设工程招聘信息网站/网站建设黄页视频
原文:http://coolketang.com/staticPhotoshop/5a98d43b9f54545074157b30.html 1. 本节课程将为您演示,如何使用[亮度/对比度]命令,调整图片的明暗度。首先依次点击[图像 > 调整 > 亮度/对比度],弹出[亮度/对比度]窗口。 2. …...