PyTorch实战-实现神经网络图像分类基础Tensor最全操作详解(一)
目录
前言
一、PyTorch数据结构-Tensor
1.什么是Tensor
2.数据Tensor使用场景
3.张量形态
标量(0D 张量)
向量(1D 张量)
矩阵(2D张量)
3D 张量与高维张量
二、Tensor的创建
1. 从列表或NumPy数组创建
2. 使用特定的初始化方法
3. 从已有的Tensor创建
三、Tensor的形状操作
1.查看大小和维度
2. 改变 Tensor 的形状
3. 移除和增加Tensor 的维度
4.交换Tensor 维度
5.拼接和堆叠Tensor
6.拆分Tensor
四、Tensor索引和切片
1.索引
2.切片
3.通过索引和切片修改 Tensor
(1).修改单个元素的值
(2).修改整行或整列
4.高级索引
(1).使用列表作为索引
(2).使用布尔值作为索引(掩码)
(3).使用 torch 的索引函数
点关注,防走丢,如有纰漏之处,请留言指教,非常感谢
前言
PyTorch可以说是三大主流框架中最适合初学者学习的了,相较于其他主流框架,PyTorch的简单易用性使其成为初学者们的首选。这样我想要强调的一点是,框架可以类比为编程语言,仅为我们实现项目效果的工具,也就是我们造车使用的轮子,我们重点需要的是理解如何使用Torch去实现功能而不要过度在意轮子是要怎么做出来的,那样会牵扯我们太多学习时间。以后就出一系列专门细解深度学习框架的文章,但是那是较后期我们对深度学习的理论知识和实践操作都比较熟悉才好开始学习,现阶段我们最需要的是学会如何使用这些工具。
深度学习的内容不是那么好掌握的,包含大量的数学理论知识以及大量的计算公式原理需要推理。且如果不进行实际操作很难够理解我们写的代码究极在神经网络计算框架中代表什么作用。不过我会尽可能将知识简化,转换为我们比较熟悉的内容,我将尽力让大家了解并熟悉神经网络框架,保证能够理解通畅以及推演顺利的条件之下,尽量不使用过多的数学公式和专业理论知识。以一篇文章快速了解并实现该算法,以效率最高的方式熟练这些知识。
博主专注数据建模四年,参与过大大小小数十来次数学建模,理解各类模型原理以及每种模型的建模流程和各类题目分析方法。此专栏的目的就是为了让零基础快速使用各类数学模型、机器学习和深度学习以及代码,每一篇文章都包含实战项目以及可运行代码。博主紧跟各类数模比赛,每场数模竞赛博主都会将最新的思路和代码写进此专栏以及详细思路和完全代码。希望有需求的小伙伴不要错过笔者精心打造的专栏。
一文速学-数学建模常用模型
一、PyTorch数据结构-Tensor
1.什么是Tensor
Tensor是PyTorch中最基本的数据结构,可以看作是一个多维数组(矩阵的扩展)。与NumPy中的数组类似,与其不同的是ndarrays不能使用GPU加速计算但Tensor可以在GPU上运行,这使得它在深度学习领域特别强大,归根结底还是得依赖庞大的算力支持我们才能尽可能得到更加精准的数据,通常我们叫它张量。
2.数据Tensor使用场景
没有引入张量这个概念之前,大家其实就在很多场景接触到了这些数据。了解到张量以后大家自然而然的就会明白了。张量这一概念的核心在于,它是一个数据容器。它包含的数据几乎总是数值数据,因此它是数字的容器。你可能对矩阵很熟悉,它是二维张量。张量是矩阵向任意维度的推广[注意,张量的维度(dimension)通常叫作轴(axis)]。
以下是一些常见的使用场景:
- 神经网络的构建和训练:神经网络的输入、权重、输出、梯度等都是以Tensor的形式表示。PyTorch、TensorFlow等深度学习框架都是基于Tensor进行运算的。
- 图像处理:图像通常以多维数组的形式表示,例如RGB图像可以表示为高度、宽度和3个颜色通道的Tensor。
- 自然语言处理:在处理文本数据时,可以将文本编码成Tensor,每个单词可以映射为一个数字或一个词向量。
- 时间序列分析:例如股票价格、天气数据等,可以表示成时间、特征维度的Tensor。
- 推荐系统:用户-物品交互矩阵可以表示为一个二维的Tensor。
- 强化学习:在Q-learning等算法中,状态、动作、奖励等信息都可以用Tensor表示。
- 计算机视觉任务:如目标检测、分割、人脸识别等任务,输入图像、特征图、目标框坐标等都可以用Tensor表示。视频为5D张量,形状为 (samples, frames, height, width, channels) 或 (samples,frames, channels, height, width) ,图片4D张量形状为 (samples, height, width, channels) 或 (samples, channels,height, width) 。
- 自动驾驶和机器人控制:传感器数据(如摄像头、激光雷达等)可以表示成Tensor,用于训练和实时控制。
- 生成对抗网络(GAN):GAN中的生成器和判别器都是基于神经网络和Tensor进行训练和推断的。
- 聚类和降维:在数据挖掘和特征工程中,Tensor可以用于聚类、主成分分析(PCA)等算法。
总的来说,Tensor作为多维数组,适用于几乎所有涉及到大规模数值计算和深度学习的领域。
这里借助numpy给大家更加直观的认识张量。
3.张量形态
标量(0D 张量)
一个只包含单个数字的张量被称为标量(scalar),也叫做标量张量、零维张量或0D张量。在NumPy中,一个float32或float64类型的数字就是一个标量张量(或标量数组)。你可以通过查看一个NumPy张量的ndim属性来了解它的轴数。标量张量具有0个轴(ndim == 0)。轴的数量也被称为阶数(rank)。以下是一个NumPy标量的例子。
import numpy as np
x = np.array(1)
print("数组中轴的个数:{}".format(x.ndim))
print(x)
数组中轴的个数:0 1
向量(1D 张量)
数字组成的数组叫作向量(vector)或一维张量(1D 张量)。一维张量只有一个轴。下面是一个 Numpy 向量。
x = np.array([1, 4, 7, 10, 13])
print("数组中轴的个数:{}".format(x.ndim))
print(x)
数组中轴的个数:1 [ 1 4 7 10 13]
这里需要注意一下,这个数组成为5D向量但不是5D张量,前者是数量上的数量,后者是轴的数量,大家不要搞混。
矩阵(2D张量)
向量组成的数组叫作矩阵(matrix)或二维张量(2D 张量)。矩阵有 2 个轴(通常叫作行和列)。你可以将矩阵直观地理解为数字组成的矩形网格。下面是一个 Numpy 矩阵。
x = np.array([[1, 8, 21, 3, 78],[8, 12, 13, 32, 11],[7, 3, 5, 6, 2]])
print("数组中轴的个数:{}".format(x.ndim))
print(x)
数组中轴的个数:2 [[ 1 8 21 3 78][ 8 12 13 32 11][ 7 3 5 6 2]]
3D 张量与高维张量
将多个矩阵组合成一个新的数组,可以得到一个 3D 张量,你可以将其直观地理解为数字组成的立方体。下面是一个 Numpy 的 3D 张量。
x = np.array([[[5, 78, 2, 34, 0],[6, 79, 3, 35, 1],[7, 80, 4, 36, 2]],[[5, 78, 2, 34, 0],[6, 79, 3, 35, 1],[7, 80, 4, 36, 2]],[[5, 78, 2, 34, 0],[6, 79, 3, 35, 1],[7, 80, 4, 36, 2]]])
print(x.ndim)
print(x)
3 [[[ 5 78 2 34 0][ 6 79 3 35 1][ 7 80 4 36 2]][[ 5 78 2 34 0][ 6 79 3 35 1][ 7 80 4 36 2]][[ 5 78 2 34 0][ 6 79 3 35 1][ 7 80 4 36 2]]]
以后我们接触到相应的数据进行张量转换的时候大家会了解的更为清晰,那么我们现在知道张量的基础概念和形式了,可以尝试着用Torch进行创建。
二、Tensor的创建
在PyTorch中,我们可以通过多种方式创建Tensor:
1. 从列表或NumPy数组创建
import torch
import numpy as np# 从列表创建
tensor_from_list = torch.Tensor([1, 2, 3, 4])# 从NumPy数组创建
numpy_array = np.array([1, 2, 3, 4])
tensor_from_numpy = torch.Tensor(numpy_array)
tensor_from_numpy
tensor([1., 2., 3., 4.])
2. 使用特定的初始化方法
# 创建一个形状为(3, 2)的随机Tensor
random_tensor = torch.randn(3, 2)# 创建一个全零的Tensor
zero_tensor = torch.zeros(3, 2)# 创建一个全1的Tensor
ones_tensor = torch.ones(3, 2)
# 创建一个从 0 到 9 的等差数列
tensor5 = torch.arange(0, 10, 1)
# 创建一个从 0 到 1 的 5 个数的均匀间隔的数列
tensor6 = torch.linspace(0, 1, 5)
print(tensor6)
print(random_tensor)
print(zero_tensor)
print(ones_tensor)
print(tensor5)
print(tensor6)
tensor([0.0000, 0.2500, 0.5000, 0.7500, 1.0000]) tensor([[ 0.9255, 1.3031],[-1.2245, -0.5758],[-1.2821, -0.3471]]) tensor([[0., 0.],[0., 0.],[0., 0.]]) tensor([[1., 1.],[1., 1.],[1., 1.]]) tensor([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) tensor([0.0000, 0.2500, 0.5000, 0.7500, 1.0000])
3. 从已有的Tensor创建
# 从已有的Tensor创建新的Tensor(共享内存)
new_tensor = torch.Tensor(random_tensor.size())
print(new_tensor)
tensor([[0., 0.],[0., 0.],[0., 1.]])
三、Tensor的形状操作
1.查看大小和维度
有两个函数size()和shape都可以查看:
random_tensor.size()
#random_tensor.shape 二者结果一致
torch.Size([3, 2])
2. 改变 Tensor 的形状
# 创建一个大小为 (2, 3) 的 Tensor
tensor = torch.arange(6).view(2, 3)
# 或者使用 reshape
# tensor = torch.arange(6).reshape(2, 3)
print(tensor)
tensor([[0, 1, 2],[3, 4, 5]])
3. 移除和增加Tensor 的维度
# squeeze 用于移除大小为 1 的维度
tensor = torch.arange(6).view(1, 2, 3)
squeezed_tensor = tensor.squeeze()
print(squeezed_tensor)# unsqueeze 用于增加维度
tensor = torch.arange(6).view(2, 3)
unsqueeze_tensor = tensor.unsqueeze(0)
print(unsqueeze_tensor)
tensor([[0, 1, 2],[3, 4, 5]]) tensor([[[0, 1, 2],[3, 4, 5]]])
4.交换Tensor 维度
# 交换维度
tensor = torch.arange(6).view(2, 3)
transposed_tensor = tensor.transpose(0, 1) # 交换维度 0 和 1
print(transposed_tensor)
tensor([[0, 3],[1, 4],[2, 5]])
5.拼接和堆叠Tensor
# cat 用于在指定维度上连接多个 Tensor
tensor1 = torch.arange(3)
tensor2 = torch.arange(3, 6)
concatenated_tensor = torch.cat((tensor1, tensor2), dim=0)
print(concatenated_tensor)# stack 用于在新的维度上堆叠多个 Tensor
stacked_tensor = torch.stack((tensor1, tensor2), dim=0)
print(stacked_tensor)
6.拆分Tensor
原Tensor:
tensor = torch.arange(10).view(2, 5)
print(tensor)
拆分结果
# split 用于在指定维度上拆分 Tensor
tensor = torch.arange(10).view(2, 5)
split_tensors = torch.split(tensor, 2, dim=1)
print(split_tensors)# chunk 用于在指定维度上将 Tensor 拆分成相等的几块
chunked_tensors = torch.chunk(tensor, 2, dim=0)
print(chunked_tensors)
(tensor([[0, 1],[5, 6]]), tensor([[2, 3],[7, 8]]), tensor([[4],[9]])) (tensor([[0, 1, 2, 3, 4]]), tensor([[5, 6, 7, 8, 9]]))
四、Tensor索引和切片
1.索引
import torch# 创建一个二维 Tensor
tensor = torch.Tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9]])# 访问单个元素
print(tensor[0, 0]) # 输出 1# 访问某一行
print(tensor[1]) # 输出 [4, 5, 6]# 访问某一列
print(tensor[:, 1]) # 输出 [2, 5, 8]# 使用逗号分隔访问多个不连续的元素
print(tensor[0, 0], tensor[1, 1], tensor[2, 2]) # 输出 1, 5, 9
tensor(1.) tensor([4., 5., 6.]) tensor([2., 5., 8.]) tensor(1.) tensor(5.) tensor(9.)
2.切片
# 使用切片获取子张量
print(tensor[0:2, 1:3]) # 输出 [[2, 3], [5, 6]]# 使用步长获取间隔元素
print(tensor[::2]) # 输出 [[1, 2, 3], [7, 8, 9]]# 使用负数索引倒序访问
print(tensor[-1]) # 输出 [7, 8, 9]
tensor([[2., 3.],[5., 6.]]) tensor([[1., 2., 3.],[7., 8., 9.]]) tensor([7., 8., 9.])
3.通过索引和切片修改 Tensor
(1).修改单个元素的值
# 创建一个二维 Tensor
tensor = torch.Tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 修改单个元素的值
tensor[0, 0] = 0
tensor
tensor([[0., 2., 3.],[4., 5., 6.],[7., 8., 9.]])
(2).修改整行或整列
整行修改:
# 创建一个二维 Tensor
tensor = torch.Tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 修改整行或整列
tensor[1] = torch.Tensor([10, 11, 12])
tensor
整列修改:
# 创建一个二维 Tensor
tensor = torch.Tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 修改整行或整列
tensor[:, 2] = torch.Tensor([30, 31, 32])
tensor
tensor([[ 1., 2., 30.],[ 4., 5., 31.],[ 7., 8., 32.]])
4.高级索引
(1).使用列表作为索引
idx = [0, 2]
print(tensor[idx]) # 输出第 0 和第 2 行
tensor([[ 1., 2., 30.],[ 7., 8., 32.]])
(2).使用布尔值作为索引(掩码)
mask = tensor > 5
print(tensor[mask]) # 输出所有大于 5 的元素
tensor([30., 31., 7., 8., 32.])
(3).使用 torch 的索引函数
# 使用 torch 的索引函数
idx = torch.LongTensor([0, 2])
print(torch.index_select(tensor, 0, idx)) # 输出第 0 和第 2 行
tensor([[ 1., 2., 30.],[ 7., 8., 32.]])
点关注,防走丢,如有纰漏之处,请留言指教,非常感谢
以上就是本期全部内容。我是fanstuck ,有问题大家随时留言讨论 ,我们下期见。
相关文章:
PyTorch实战-实现神经网络图像分类基础Tensor最全操作详解(一)
目录 前言 一、PyTorch数据结构-Tensor 1.什么是Tensor 2.数据Tensor使用场景 3.张量形态 标量(0D 张量) 向量(1D 张量) 矩阵(2D张量) 3D 张量与高维张量 二、Tensor的创建 1. 从列表或NumPy数组创建 2. 使用特定的初始…...
第29章_瑞萨MCU零基础入门系列教程之改进型环形缓冲区
本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写,需要的同学可以在这里获取: https://item.taobao.com/item.htm?id728461040949 配套资料获取:https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总: ht…...
如何搭建一个react项目(详细介绍)
要搭建一个基本的 React 项目,你需要执行以下步骤。在开始之前,请确保你已经安装了 Node.js 和 npm(Node 包管理器)。 搭建一个React项目 1,创建项目目录2,初始化项目3,安装 React 和 ReactDOM4…...
ActiveMQ用法
ActiveMQ 和 JMS的关系? ActiveMQ是流行的开源消息中间件,JMS是Java平台定义的一种消息传递的标准。ActiveMQ实现了JMS规范,因此可以使用JMS API来与ActiveMQ进行交互。 JMS定义了一种标准的API。API包括了一些接口和类,用于创建…...
TouchGFX之缓存位图
位图缓存是专用RAM缓冲区,应用可将位图保存(或缓存)在其中。 如果缓存了位图,在绘制位图时,TouchGFX将自动使用RAM缓存作为像素来源。位图缓存在许多情况下十分有用。 从RAM读取数据通常比从闪存读取要快(特…...
线性代数的本质(十)——矩阵分解
文章目录 矩阵分解LU分解QR分解特征值分解奇异值分解奇异值分解矩阵的基本子空间奇异值分解的性质矩阵的外积展开式 矩阵分解 矩阵的因式分解是把矩阵表示为多个矩阵的乘积,这种结构更便于理解和计算。 LU分解 设 A A A 是 m n m\times n mn 矩阵,…...
vue实现鼠标拖拽div左右移动的功能
直接代码: <template><div class"demo"><div class"third-part" id"发展历程"><div class"title">发展历程</div><div class"content" id"nav" v-if"dataList…...
基于Python和mysql开发的商城购物管理系统分为前后端(源码+数据库+程序配置说明书+程序使用说明书)
一、项目简介 本项目是一套基于Python和mysql开发的商城购物管理系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Python学习者。 包含:项目源码、项目文档、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过…...
MySQL内外连接、索引特性
目录 内连接 外连接 索引特性 理解索引 删除索引 MySQL内外连接是一种用于联接两个或多个表的操作。内连接只返回满足连接条件的行,外连接返回满足条件和不满足条件的行。 内连接 SQL如下: SELECT ... FROM t1 INNER JOIN t2 ON 连接条件 [INNER …...
滚动条设置
不同浏览器滚动条样式及滚动定位 是否可以滚动 overflow:scroll overflow:autooverflow:scroll – 只有超出了盒子才会有滚动条 overflow:auto – 一直有滚动的盒子,只是超出了盒子才会出现滚动条滑块,可以滚动 谷歌浏览器滚动…...
【AI】机器学习——感知机
文章目录 4.1 感知机基本概念4.2 策略4.2.1 数据集的线性可分性4.2.2 学习策略目标损失函数的构造关于距离的解释 4.3 算法4.3.1 原始形式损失函数的梯度下降法 4.3.2 PLA例题4.3.3 算法收敛性 4.4 PLA对偶形式4.4.1 原始PLA分析4.4.2 PLA对偶形式4.4.3 优点 4.1 感知机基本概念…...
蓝牙遥控器在T2-U上的应用
文章目录 简介优势使用流程示例代码遥控器命令表遥控器代码实现开启遥控器配对功能运行 简介 Tuya beacon 协议是基于 BLE 广播通信技术,完善配对解绑、组包拆包、群组管理、加密解密、安全策略,形成的一种轻量、安全的可接入涂鸦云的蓝牙协议。 蓝牙 …...
数据驱动的数字营销与消费者运营
引言:基于海洋馆文旅企业在推广宣传中,如何通过指标体系量化分析广告收益对业务带来的收益价值的思考? 第一部分:前链路引流投放的策略与实战 1.1 动态广告的实现: 偶然与必然 动态广告是一种基于实时数据和用户行为的广告形式,它…...
Qt点亮I.MX6U开发板的一个LED
本篇开始将会介绍与开发版相关的Qt项目,首先从点亮一个LED开始。I.MX6U和STM32MP157的相关信息都会用到,但是后期还是将I.MX6U的学习作为重点。当然其他开发版的开发也可以参考本博文。 文章目录 1. Qt是如何操控开发板上的一个LED2. 出厂内核设备树中注…...
网络摄像头-流媒体服务器-视频流客户端
取电脑的视频流 当涉及交通事件检测算法和摄像头视频数据处理时,涉及的代码案例可能会非常复杂,因为这涉及到多个组件和技术。以下是一个简单的Python代码示例,演示如何使用OpenCV库捕获摄像头视频流并进行实时车辆检测,这是一个…...
Django05_反向解析
Django05_反向解析 5.1 反向解析概述 随着功能的不断扩展,路由层的 url 发生变化,就需要去更改对应的视图层和模板层的 url,非常麻烦,不便维护。这个时候我们可以通过反向解析,将 url解析成对应的 试图函数 通过 path…...
基于HTML、CSS和JavaScript制作一个中秋节倒计时网页
💂 个人网站:【工具大全】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 这个项目使用HTML、CSS和…...
富斯I6刷10通道固件
使用USB转串口模块刷写10通道固件 一、下载固件 1. 十通道英文固件 下载地址: https://github.com/benb0jangles/FlySky-i6-Mod-/tree/master 选择 FlySky-i6-Mod–master \ 10ch Mod i6 Updater \ 10ch_MOD_i6_Programmer_V1 路径下的文件,亲测可用。 2. 原版六通道中…...
vector的模拟实现 总结
vector的模拟实现 总结 vector.hTest.cpp vector.h 1、迭代器的实现 #pragma oncenamespace JPC {template<class T>class vector{public://对于存储空间是连续的结构而言,可以用原身指针来 模拟实现 迭代器。typedef T* iterator;typedef const T* const_i…...
k8s中的有状态,无状态,pv、pvc等
数据库是一个典型的有状态服务,他的部署和无状态服务是不一样的。 PostgresSQL----基于Kubernetes部署PostgresSQL-CSDN博客 一、创建SC、PV和PVC存储对象 二、部署PostgresSQL Volume Kubernetes 中文指南——云原生应用架构实战手册 有状态应用: …...
springboot+jxls复杂excel模板导出
JXLS 是基于 Jakarta POI API 的 Excel 报表生成工具,可以生成精美的 Excel 格式报表。它采用标签的方式,类似 JSP 标签,写一个 Excel 模板,然后生成报表,非常灵活,简单! Java 有一些用于创建 …...
用selenium webdriver获取网站cookie后,实现免登录上网站
以csdn为例,代码分为两部分。 一、csdn_get_cookies.py为半手动登录网站后获取cookies 二、csdn_use_cookies.py为使用获取到的cookies免登录上网站 #获取登录cookiesfrom selenium import webdriver import jsoncsdn_driver webdriver.Chrome() url "htt…...
如何使用Java进行安全测试?
要使用Java进行安全测试,可以按照以下步骤进行: 确定测试目标:首先,明确要测试的应用程序或系统的安全目标和需求。确定要测试的安全方面,如身份验证、授权、输入验证、安全配置等。 了解安全测试知识:熟悉…...
Linux之Socket函数(详细篇)
本篇是基于Linux man手册的一些总结 socket作用: create an endpoint for communication 函数结构 c #include <sys/types.h> /* See NOTES */ #include <sys/socket.h> int socket(int domain, int type, int protocol); 描述 socket() …...
Dajngo06_Template模板
Dajngo06_Template模板 6.1 Template模板概述 模板引擎是一种可以让开发者把服务端数据填充到html网页中完成渲染效果的技术 静态网页:页面上的数据都是写死的,万年不变 动态网页:页面上的数据是从后端动态获取的(后端获取数据库…...
快速幂 c++
一般大家写都是 int ans 1; for (int i 1; i < a; i )ans * x;时间复杂度 但是这对于我们还不够,我们要 首先我们得知道一个数学知识 那么求 就有以下递归式 a 能被2整除 a 不能被2整除 (这里a/2是整除) 所以每次都调用 不就是么 最后补充一个东西…...
分享一个基于微信小程序的医院口腔助手小程序 牙科诊所预约小程序 源码 lw 调试
💕💕作者:计算机源码社 💕💕个人简介:本人七年开发经验,擅长Java、Python、PHP、.NET、微信小程序、爬虫、大数据等,大家有这一块的问题可以一起交流! 💕&…...
Si3262 一款低功耗刷卡+触摸+mcu 三合一SOC芯片
Si3262是-款高度集成的低功耗soC芯片,其集成了基于RISC-V 核的低功耗MCU和工作在13.56MHz的非接触式读写器模块。 该芯片ACD模式下刷卡距离可达4-5cm(天线决定),适用于智能门锁,电子锁,柜锁,桑拿…...
[H5动画制作系列] 奔跑的豹子的四种Demo演化
资源: bg.jpg: leopard.png: 背景透明 peopard2.png 背景不透明 参考代码1: leopard.js: (function(window) {ma function() {this.initialize();}ma._SpriteSheet new createjs.SpriteSheet({images: ["leopard.png"], frames: [[0,0,484,207],[486,0,484,207]…...
如何实现让一个函数能返回多个值的效果
在C语言中,一个函数通常只能返回一个值。但是可以通过指针参数或结构体来模拟返回多个值的效果。 使用指针参数:你可以将需要返回的值作为函数的参数,通过指针的形式传入,让函数将结果写入指针所指向的内存位置。 void multiple…...
哪种网站/网页自动点击软件
文章目录前言一、方法1.使用TextBox层叠2.同步TextBox位置二、示例1.代码2.显示效果总结1.优点2.缺点前言 我上一篇文章写到了C# wpf textblock文字添加描边的一种方法 ,这里做个补充添加上TextBox用同样方法实现文字描边,但是TextBox和TextBlock还是有…...
wordpress网站自动伪原创/seo优化神器
KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt同时发现,因此人们称它为克努特——莫里斯——普拉特操作(简称KMP算法)。KMP算法的关键是利用匹配失败后的信息,尽量减少模式串与主串…...
新闻cms静态网站模板下载/网络营销师官网
#禁用gpu版本TensorFlow,因为CUDA号码从0开始,这里直接让CUDA使用-1的GPU,自然就无法使用gpu了。 代码前面加入: import os os.environ["CUDA_VISIBLE_DEVICES"]"-1" import tensorflow as tf Environm…...
做电影采集网站用什么vps/免费ip地址网站
2019独角兽企业重金招聘Python工程师标准>>> 1.打开eclipse,创建一个java project 2.创建lib文件夹,放入mybatis jar包和ojdbc jar包,并添加到buildpath 3.创建generatorConfig.xml文件,位置如上图中所示,内…...
广东官方移动网站建设哪家好/营销的主要目的有哪些
JetBrain官网——传送门 plugin 下载 在gitee下载 plugin 使用 打开软件(打开一个项目) 将Plugin(压缩包) 直接拖进去 End...
网站设计建设介绍/网站运营课程
HTTP Basic Authentication 这种授权方式是浏览器遵守http协议实现的基本授权方式,HTTP协议进行通信的过程中,HTTP协议定义了基本认证认证允许HTTP服务器对客户端进行用户身份证的方法。 效果: 客户端未未认证的时候,会弹出用户名密码输入框…...