小土堆pytorch--transform
torchvision中的transform
- torchvision中的transform
- 1. transforms的使用
- 1.1 transforms的结构及用法理论
- 1.2 相应代码
- 1.3 对上述代码的解释
- 2. 常见的transforms
- 2.1 python 的call函数
- 2.2 ToTensor的使用
- 2.3 Normalize的使用
- 2.4 Resize的使用
- 2.5 Compose的使用
- 2.6 RandomCrop的使用
- 3.一些技巧
torchvision中的transform
1. transforms的使用
1.1 transforms的结构及用法理论
transforms中有很多工具,我们可以利用其中的工具把图片转换成想要的结果
这张图展示了 transforms
在图像处理中的结构及用法:
- 整体流程:以图片作为输入,经过
transforms.py
工具箱中的工具处理后,得到处理结果。 - 关键组件
transforms.py工具箱
:是一个包含各种图像处理工具的集合,这里提到了totensor
和resize
两种工具。totensor
:通常用于将图片数据转换为张量(Tensor)格式 ,这在深度学习中是常见操作,方便后续的模型处理。resize
:用于改变图片的尺寸,可将图片调整为指定的大小,满足不同模型输入尺寸的要求等。
- 流程说明:原始图片进入
transforms.py
工具箱,利用其中的totensor
、resize
等工具进行处理,处理完毕后输出得到结果,供后续使用,比如输入到深度学习模型中进行训练或预测等。
1.2 相应代码
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms
from PIL import Image
from torch.utils.tensorboard import SummaryWriter
# python 的用法 -》 tensor数据类型
# 通过 transforms.Totensor 去看两个问题img_path = 'dataset/train/bees/36900412_92b81831ad.jpg'
img = Image.open(img_path)
print(img)writer = SummaryWriter("logs")
# 1.transforms该如何使用(python)tensor_trans = transforms.ToTensor()
print(tensor_trans)
tensor_img = tensor_trans(img)print(tensor_img)# 2.为什么我们需要Tensor数据类型
writer.add_image("Tensor_img", tensor_img)writer.close()
上述代码主要演示了如何使用 torchvision.transforms
中的 ToTensor
类将 PIL
图像转换为 Tensor
数据类型,并使用 torch.utils.tensorboard
将转换后的图像可视化。
运行结果:
1.3 对上述代码的解释
- 导入必要的库
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms
from PIL import Image
from torch.utils.tensorboard import SummaryWriter
SummaryWriter
:用于将数据写入TensorBoard
日志文件,方便后续可视化。transforms
:torchvision
库中的模块,提供了各种图像变换工具。Image
:PIL
库中的类,用于打开和处理图像。
- 打开图像文件
img_path = 'dataset/train/bees/36900412_92b81831ad.jpg'
img = Image.open(img_path)
print(img)
img_path
:指定图像文件的路径。Image.open(img_path)
:使用PIL
的Image
类打开指定路径的图像文件,并将其存储在img
变量中。print(img)
:打印图像的基本信息,例如图像的模式(如RGB
)和尺寸。
- 创建
SummaryWriter
对象
writer = SummaryWriter("logs")
SummaryWriter("logs")
:创建一个SummaryWriter
对象,将日志文件保存到logs
目录下。
- 使用
ToTensor
进行图像转换
tensor_trans = transforms.ToTensor()
print(tensor_trans)
tensor_img = tensor_trans(img)
print(tensor_img)
transforms.ToTensor()
:创建一个ToTensor
实例,用于将PIL
图像或numpy.ndarray
转换为Tensor
数据类型。print(tensor_trans)
:打印ToTensor
实例的信息。tensor_trans(img)
:调用ToTensor
实例的__call__
方法,将img
转换为Tensor
数据类型,并将结果存储在tensor_img
中。print(tensor_img)
:打印转换后的Tensor
图像的信息。
tips:
1.
当我们不知道一个方法中需要什么参数是,我们可以按快捷键CTRL+p进行查看
2.
当我们不确定函数的用法时候我们可以通过CTRL+左键去看对应函数的官方文档
-
解释为什么需要
Tensor
数据类型
在深度学习中,模型通常只能处理Tensor
数据类型。因此,需要将图像数据转换为Tensor
类型,以便能够输入到模型中进行训练或推理。ToTensor
类将PIL
图像转换为Tensor
时,还会将像素值从[0, 255]
归一化到[0, 1]
范围内,这有助于模型的训练和收敛。 -
将
Tensor
图像写入TensorBoard
writer.add_image("Tensor_img", tensor_img)
writer.add_image("Tensor_img", tensor_img)
:将tensor_img
写入TensorBoard
日志文件,并指定图像的标签为"Tensor_img"
。
- 关闭
SummaryWriter
writer.close()
writer.close()
:关闭SummaryWriter
对象,确保所有数据都被写入日志文件。
综上所述,这段代码展示了如何使用 torchvision.transforms
中的 ToTensor
类将 PIL
图像转换为 Tensor
数据类型,并使用 TensorBoard
可视化转换后的图像。
2. 常见的transforms
2.1 python 的call函数
class Person:def __call__(self, name):print("__call__"+"Hello "+name)def hello(self, name):print("hello"+ name)person = Person()
person("zhangsan")
person.hello("lisi")
也就是如果我们有内置的call函数的话,我们只需要使用:对象+参数 就可以直接调用对应函数,而不用使用“." 的方法
2.2 ToTensor的使用
from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transformswriter = SummaryWriter("logs")
img = Image.open("dataset/train/bees/92663402_37f379e57a.jpg")
print(img)# ToTensor
trans_totensor = transforms.ToTensor();
img_tensor = trans_totensor(img)
writer.add_image("Totensor_1",img_tensor)writer.close()
现在我们把PIL类型的img使用transforms中的totensor方法把他变成tensor数据类型的img(即img_tensor), 然后就可以直接装入tensorboard中
运行结果
2.3 Normalize的使用
即用均值和标准差归一化tensor数据类型的图片
from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transformswriter = SummaryWriter("logs")
img = Image.open("dataset/train/bees/92663402_37f379e57a.jpg")
print(img)# ToTensor
trans_totensor = transforms.ToTensor();
img_tensor = trans_totensor(img)
writer.add_image("Totensor_1",img_tensor)# Normalize
print(img_tensor[0][0][0])
trans_norm = transforms.Normalize([0.5,0.5,0.5],[0.5,0.5,0.5])
img_norm = trans_norm(img_tensor)
print(img_norm[0][0][0])
writer.add_image("Normalize",img_norm)writer.close()
归一化:-0.7098 = (0.1451-0.5)/0.5
即输入值减去均值除以标准差
经过归一化之后发现这张图片和上一张图片的颜色上有了一些区别
2.4 Resize的使用
Resize 是 torchvision.transforms 模块里的一个类,其用途是调整图像的大小
trans_resize = transforms.Resize((512, 512))
transforms.Resize 是一个类,用于创建一个调整图像大小的变换对象。
其参数可以是一个整数或者一个元组:
若为整数,Resize 会把图像的短边调整为该整数指定的长度,同时保持图像的宽高比。
若为元组 (h, w),则会把图像调整为指定的高度 h 和宽度 w。
在上述代码中,(512, 512) 表示将图像调整为高度和宽度均为 512 像素的大小。
from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transformswriter = SummaryWriter("logs")
img = Image.open("dataset/train/bees/92663402_37f379e57a.jpg")
print(img)# ToTensor
trans_totensor = transforms.ToTensor();
img_tensor = trans_totensor(img)
writer.add_image("Totensor_1",img_tensor)# Normalize
print(img_tensor[0][0][0])
trans_norm = transforms.Normalize([0.5,0.5,0.5],[0.5,0.5,0.5])
img_norm = trans_norm(img_tensor)
print(img_norm[0][0][0])
writer.add_image("Normalize",img_norm)# Resize
print(img.size)
trans_resize = transforms.Resize((512,512))img_resize = trans_resize(img)
img_resize = trans_totensor(img_resize)
print(img_resize)
writer.add_image("Resize", img_resize, 0)writer.close()
经过resize之后发现图片的尺寸发生了改变
2.5 Compose的使用
transforms.Compose 作用是将多个图像变换操作组合成一个操作序列
from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transformswriter = SummaryWriter("logs")
img = Image.open("dataset/train/bees/92663402_37f379e57a.jpg")
print(img)# ToTensor
trans_totensor = transforms.ToTensor();
img_tensor = trans_totensor(img)
writer.add_image("Totensor_1",img_tensor)# Normalize
print(img_tensor[0][0][0])
trans_norm = transforms.Normalize([0.5,0.5,0.5],[0.5,0.5,0.5])
img_norm = trans_norm(img_tensor)
print(img_norm[0][0][0])
writer.add_image("Normalize",img_norm)# Resize
print(img.size)
trans_resize = transforms.Resize((512,512))img_resize = trans_resize(img)
img_resize = trans_totensor(img_resize)
print(img_resize)
writer.add_image("Resize", img_resize, 0)# Compose - resize - 2
trans_resize_2 = transforms.Resize(512)
trans_compose = transforms.Compose([trans_resize_2, trans_totensor])
img_resize_2 = trans_compose(img)
writer.add_image("Resize", img_resize_2, 1)writer.close()
当需要对图像依次进行多个变换时,如先调整大小再转为张量,若不使用 Compose ,每次都要分别调用变换函数,代码冗余。使用 Compose 可将多个变换整合,只需一次调用组合操作就能按顺序执行所有变换。如代码中 trans_compose = transforms.Compose([trans_resize_2, trans_totensor]) ,把 Resize(调整图像大小)和 ToTensor(转换为张量)操作组合,后续 img_resize_2 = trans_compose(img) 调用一次,就相当于依次执行了这两个操作。
运行结果
2.6 RandomCrop的使用
transforms.RandomCrop 是 torchvision 库中用于图像数据增强的一个类,主要作用是对输入图像进行随机裁剪,增加数据多样性,提升模型泛化能力。
trans_random = transforms.RandomCrop(300)
transforms.RandomCrop 类的构造函数形式为 transforms.RandomCrop(size, padding=None, pad_if_needed=False, fill=0, padding_mode=‘constant’) :
size:必填参数 ,用于指定裁剪后图像的尺寸。可以是一个整数,若为整数,则表示裁剪出的正方形图像边长;也可以是 (h, w) 形式的元组,分别代表裁剪后图像的高度 h 和宽度 w 。代码中 300 表示裁剪出边长为 300 像素的正方形图像。
padding:可选参数,用于指定在图像四周填充的像素数。若为整数,图像上下左右均匀填充该整数个像素;若为序列(如二元组或四元组),有不同的填充规则 。例如 padding = 4 ,图像四周都填充 4 个像素;若为 (2, 4) ,表示左右填充 2 个像素,上下填充 4 个像素;若为 (1, 2, 3, 4) ,则依次对应左、上、右、下填充的像素数。
pad_if_needed:可选参数,布尔值。若设为 True ,当图像尺寸小于裁剪尺寸时,会对图像进行填充,使其满足裁剪要求;默认 False ,若图像尺寸小于裁剪尺寸会报错 。
fill:可选参数,用于指定填充的值。当 padding_mode 为 ‘constant’ 时有效。若为整数,各通道填充该值;若为长度为 3 的元组,对应 RGB 通道填充的值 。
padding_mode:可选参数,指定填充模式,有 ‘constant’(常量填充) 、‘edge’(按图像边缘像素值填充)等 4 种模式。
from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transformswriter = SummaryWriter("logs")
img = Image.open("dataset/train/bees/92663402_37f379e57a.jpg")
print(img)# ToTensor
trans_totensor = transforms.ToTensor();
img_tensor = trans_totensor(img)
writer.add_image("Totensor_1",img_tensor)# Normalize
print(img_tensor[0][0][0])
trans_norm = transforms.Normalize([0.5,0.5,0.5],[0.5,0.5,0.5])
img_norm = trans_norm(img_tensor)
print(img_norm[0][0][0])
writer.add_image("Normalize",img_norm)# Resize
print(img.size)
trans_resize = transforms.Resize((512,512))img_resize = trans_resize(img)
img_resize = trans_totensor(img_resize)
print(img_resize)
writer.add_image("Resize", img_resize, 0)# Compose - resize - 2
trans_resize_2 = transforms.Resize(512)
trans_compose = transforms.Compose([trans_resize_2, trans_totensor])
img_resize_2 = trans_compose(img)
writer.add_image("Resize", img_resize_2, 1)# RandomCrop
trans_random = transforms.RandomCrop(300)
trans_compose_2 = transforms.Compose([trans_random, trans_totensor])
for i in range(10):img_crop = trans_compose_2(img)writer.add_image("RandomCrop", img_crop,i)writer.close()
我们对图片随机裁剪10次,得到的结果
3.一些技巧
相关文章:
小土堆pytorch--transform
torchvision中的transform torchvision中的transform1. transforms的使用1.1 transforms的结构及用法理论1.2 相应代码1.3 对上述代码的解释 2. 常见的transforms2.1 python 的call函数2.2 ToTensor的使用2.3 Normalize的使用2.4 Resize的使用2.5 Compose的使用2.6 RandomCrop的…...
【Django】REST 常用类
ModelSerializer serializers.ModelSerializer 是 Django REST framework(DRF)里的一个强大工具,它能极大简化序列化和反序列化 Django 模型实例的流程。下面从多个方面详细介绍它: 1. 基本概念 序列化是把 Django 模型实例转化…...
PyTorch常用命令详解:助力深度学习开发
📌 友情提示: 本文内容由银河易创AI(https://ai.eaigx.com)创作平台的gpt-4-turbo模型生成,旨在提供技术参考与灵感启发。文中观点或代码示例需结合实际情况验证,建议读者通过官方文档或实践进一步确认其准…...
第二章 Logback的架构(二)
Logger, Appenders 和 Layouts Appenders 和 Layouts 基于日志记录器选择性地启用或禁用日志记录请求只是其中的一部分功能。Logback允许将日志记录请求输出到多个目标。在Logback术语中,输出目标被称为Appender。 目前,已经存在适用于控制台、文件、远…...
【大数据】服务器上部署Apache Paimon
1. 环境准备 在开始部署之前,请确保服务器满足以下基本要求: 操作系统: 推荐使用 Linux(如 Ubuntu、CentOS)。 Java 环境: Paimon 依赖 Java,推荐安装 JDK 8 或更高版本。 Flink 环境: Paimon 是基于 Apache Flink 的…...
【IP101】图像处理进阶:从直方图均衡化到伽马变换,全面掌握图像增强技术
🌟 图像增强魔法指南 🎨 在图像处理的世界里,增强就像是给图片化妆,让它展现出最佳的状态。让我们一起来探索这些神奇的增强术吧! 📚 目录 基础概念 - 图像增强的"美容院"直方图均衡化 - 光线的…...
【Azure Redis 缓存】关于Azure Cache for Redis 服务在传输和存储键值对(Key/Value)的加密问题
问题描述 Azure Cache for Redis 服务在传输和存储数据时是如何加密呢? 问题回答 一:关于Azure cache for Redis服务在数据传输过程中是如何加密的? 为了确保在Azure cache for Redis和客户端应用程序之间传输的数据安全,需要启用…...
Cursor 被封解决方案
一、注册一个无限邮箱 没事点点广告,让网站活久一点(✪ω✪) 2925邮箱-无限邮2925无限邮箱支持多种客户端收发邮件且数据安全加密多端同步。只需要注册一个账号,就能生成无限多个2925子邮箱账号,同时利用一邮多用功能对多个子邮箱邮件进行集…...
spring上传文件添加水印
1、实现 MultipartFile package com.pojo.common.core.domain;import java.io.ByteArrayInputStream; import java.io.File; import java.io.IOException; import java.io.InputStream;import org.springframework.lang.Nullable; import org.springframework.util.Assert; im…...
CSS分栏布局
分栏布局将区域划分为若干垂直的栏,子元素放置到栏中,填满一个后再填充下一个。如果设置了 column-count 栏数量或 column-width 栏宽度,元素就成为分栏容器。需要注意, column-width 实际上是最小栏宽度。浏览器使用这个值计算栏…...
通过 ModernBERT 实现零样本分类的性能提升
文本分类 是机器学习中最基础的任务之一,拥有悠久的研究历史和深远的实用价值。更重要的是,它是许多实际项目中不可或缺的组成部分,从搜索引擎到生物医学研究都离不开它。文本分类方法被广泛应用于科学论文分类、用户工单分类、社交媒体情感分…...
【AI】Ubuntu 22.04 4060Ti 16G vllm-api部署Qwen3-8B-FP8
下载模型 # 非常重要,否则容易不兼容报错 pip install modelscope -U cd /data/ai/models modelscope download --model Qwen/Qwen3-8B-FP8 --local_dir ./Qwen3-8B-FP8 安装vllm 创建虚拟环境 mkdir vllm cd vllm/ python -m venv venv ource venv/bin/activat…...
QML ProgressBar控件详解
在 QML 中,ProgressBar 是一个常用的进度条控件,用于显示任务的完成进度。以下是 ProgressBar 的详细用法,包括基本用法、自定义样式、动态绑定数据等。 1. 基本用法 1.1 最简单的 ProgressBar import QtQuick.Controls 2.15ProgressBar {w…...
STM32教程:串口USART通讯协议原理及分析(基于STM32F103C8T6最小系统板标准库开发)*详细教程*
前言: 本文主要介绍了单片机的通讯协议和STM32的串口USART通讯的原理及分析。 通信的目的 将一个设备的数据传送到另一个设备,扩展硬件系统。 通信协议 指定通信的规则,通信双方按照协议规则进行数据收发。 STM32常见通讯协议 各通讯特点 USART: TX(发送)、RX(接…...
EDA文件
不同的EDA软件使用不同的文件扩展名和格式,以下是主流工具对应的文件类型: EDA软件文件扩展名说明Altium Designer.PcbDocAltium专属格式,需用原软件打开,可导出为Gerber或STEP文件用于生产。KiCad.kicad_pcbKiCad项目文件&#…...
【C/C++】构造函数与析构函数
📘 C 构造函数与析构函数详解笔记 🧠 为什么需要构造函数与析构函数? 在 C 中,对象创建和销毁过程如果仅靠手动赋值和清理非常容易出错。为此,语言提供了构造函数和析构函数: 构造函数:用于在…...
在Unity AR应用中实现摄像头切换功能
本教程将详细讲解如何在Unity AR Foundation项目中实现前后摄像头切换功能,并提供完整的代码解析。我们将使用AR Foundation的核心组件和简单的UI交互来实现这一功能。 第一部分:环境准备 1.1 所需组件 Unity 2019.4或更高版本 AR Foundation 4.0+ ARCore XR Plugin(Andro…...
Pycharm(十九)深度学习
一、深度学习概述 1.1 什么是深度学习 深度学习是机器学习中的一种特殊方法,它使用称为神经网络的复杂结构,特别是“深层”的神经网络,来学习和做出预测。深度学习特别适合处理大规模和高维度的数据,如图像、声音和文本。深度学习、机器学习和人工智能之间的关系如下图所…...
状态模式 VS 策略模式
在软件开发的世界里,设计模式如同工匠手中的精良工具,能帮助开发者打造出结构清晰、易于维护和扩展的软件系统。状态模式和策略模式便是其中两个常用却容易让人混淆的设计模式。接下来,我们会详细剖析它们的区别、适用场景,并给出…...
如何在 Ubuntu 24.04 本地安装 DeepSeek ?
在本地 Ubuntu 系统上安装 DeepSeek 可以让您在本地使用高级 AI 功能,从而消除对云服务的依赖需求。 What is DeepSeek? DeepSeek 是一个先进的开源人工智能模型,专为自然语言理解和生成而设计。它提供了类似ChatGPT的强大功能。 Prerequisites: A …...
云计算训练营笔记day02(Linux、计算机网络、进制)
Linux 是一个操作系统 Linux版本 RedHat Rocky Linux CentOS7 Linux Ubuntu Linux Debian Linux Deepin Linux 登录用户 管理员 root a 普通用户 nsd a 打开终端 放大: ctrl shift 缩小: ctrl - 命令行提示符 [rootlocalhost ~]# ~ 家目录 /root 当前登录的用户…...
数据库实验10 函数存储
数据库实验10 一、实验目的 掌握函数和存储过程的定义方法,包括标量函数、表值函数、存储过程的语法结构。理解函数和存储过程的作用及原理,区分标量函数与表值函数的应用场景,掌握存储过程的参数传递、逻辑控制和错误处理机制。能够熟练运…...
SQL Server执行安装python环境
安装注意事项 启用python脚本支持 sp_configure external scripts enabled, 1; RECONFIGURE; 安装后接受 Python EULA协议 接受python授权 setup.exe /qs /ACTIONInstall /FEATURESSQL_INST_MR /INSTANCENAME您的实例名 /IACCEPTROPENLICENSETERMS1 /IACCEPTPYTHONLICENSETE…...
ActiveMQ 安全机制与企业级实践(二)
四、企业级实践案例分析 4.1 案例背景介绍 某大型电商企业拥有复杂的分布式系统,涵盖订单管理、库存管理、物流配送、用户服务等多个核心业务模块。在业务快速发展过程中,系统间的通信量呈爆发式增长,为了实现系统的高效解耦和异步通信&…...
ActiveMQ 安全机制与企业级实践(一)
一、引言 在当今数字化时代,企业级应用的架构愈发复杂,各个系统之间的通信和协作变得至关重要。消息队列作为一种高效的异步通信机制,在企业级应用集成中扮演着关键角色。ActiveMQ 作为一款广泛使用的开源消息中间件,以其丰富的功…...
【Python pass 语句】
在 Python 中,pass 语句是一个特殊的空操作(no-op)语句,它的核心作用是保持程序结构的完整性,同时不执行任何实际操作。以下是详细说明: 一、基础特性 语法占位符:当语法上需要一条语句&#x…...
Maven依赖未生效问题
在你描述的情况下,测试类无法找到 Maven 依赖的 jar 包,可能由以下原因导致: 依赖未正确添加到 pom.xml 检查 pom.xml 文件中是否正确添加了 Elasticsearch 和 JUnit 等相关依赖。例如,对于 Elasticsearch 的 TransportClient 相关…...
NGINX `ngx_http_auth_request_module` 模块详解基于子请求的认证授权方案
一、背景介绍 在 Web 系统中,我们常常需要根据外部服务(例如单点登录、API 网关、权限中心)的结果来判断用户是否有权限访问某个资源。NGINX 提供的 ngx_http_auth_request_module 模块,正是为这种场景而生。它允许通过向后端发送…...
Qwen3简要介绍(截止20250506)
Qwen3是阿里云推出的一个大语言模型系列,它在多个方面进行了升级和优化。以下是Qwen3的一些主要特点: 模型规模多样:Qwen3提供了一系列不同规模的模型,包括稠密模型(0.6B、1.7B、4B、8B、14B、32B)以及专家…...
精益数据分析(42/126):移动应用商业模式的深度剖析与实战要点
精益数据分析(42/126):移动应用商业模式的深度剖析与实战要点 在创业和数据分析的学习之路上,我们持续探索不同商业模式的奥秘,今天聚焦于移动应用商业模式。我希望和大家一起进步,深入解读《精益数据分析…...
2025.5.6总结
昨天12:30睡觉,结果翻来覆去睡不着,两点半左右才睡着。看了一下最近的睡眠打卡,平均入睡时间是凌晨12:30。 自五一一个人过了5天,我才明白,人是需要社交的,只有在社交中才能找到自我…...
UE5 脚部贴地不穿过地板方案
UE自带的IK RIG和ControlRig技术 【UE5】角色脚部IK——如何让脚贴在不同斜度的地面(设置脚的旋转)_哔哩哔哩_bilibili 实验后这个还是有一部分问题,首先只能保证高度不能穿过,但是脚步旋转还是会导致穿模 IK前,整个模型在斜坡上会浮空 参考制作:https://www.youtube.com/w…...
Spring AI 函数调用(Function Call)系统设计方案
一、系统概述与设计目标 1.1 核心目标 从零构建一个灵活、安全、高效的函数调用系统,使大语言模型能够在对话中调用应用程序中的方法,同时保持良好的开发体验和企业级特性。 1.2 主要功能需求 支持通过注解将普通Java方法标记为可被AI调用的函数自动生成符合LLM要求的函数…...
Jupyter Notebook为什么适合数据分析?
Jupyter Notebook 是一款超实用的 Web 应用程序,在数据科学、编程等诸多领域都发挥着重要作用。它最大的特点就是能让大家轻松创建和共享文学化程序文档。这里说的文学化程序文档,简单来讲,就是把代码、解释说明、数学公式以及数据可视化结果…...
Leetcode Hot 100字母异位词分词
题目描述 思路 根据题意,我们可以得知我们需要将字符统计数一样的字符串,放在一起,并以列表进行返回。因此我们可以通过一个哈希表,把统计相同的放在一起,最终返回即可 代码 class Solution:def groupAnagrams(self…...
用python实现鼠标监听与手势交互
摘要 本文探讨了一种基于Python的数学函数可视化系统的设计与实现,该系统整合了Pynput鼠标事件监听机制、Matplotlib绘图引擎以及PyQt5图形用户界面框架。系统通过人机交互方式实现了函数图像的直观构建与可视化表达,支持多种函数类型的参数化建模与实时…...
UE5 GAS开发P47 游戏标签
FGameplayTag 是 Unreal Engine 中用于标记游戏对象的系统。它允许开发者为游戏对象分配标签,以便在游戏中对其进行分类、识别和操作。 FGameplayTag 结构用于表示单个游戏标签,而 FGameplayTagContainer 则用于表示一组游戏标签。 这些标签可以用于诸…...
C# 实现PLC数据自动化定时采集与存储(无需界面,自动化运行)
C# 实现PLC数据自动化定时采集与存储(无需界面,自动化运行) 在平时开发中,我们时常会遇到需要后台静默运行的应用场景,这些程序不需要用户的直接操作或界面展示,而是专注于定时任务的执行。比如说…...
Java实现堆排序算法
1. 堆排序原理图解 堆排序是一种基于二叉堆(通常使用最大堆)的排序算法。其核心思想是利用堆的性质(父节点的值大于或等于子节点的值)来高效地进行排序。堆排序分为两个主要阶段:建堆和排序。 堆排序步骤: …...
封装axios,实现取消请求
封装axios import axios from axios// 创建自定义的请求类 class CancelableRequest {constructor() {this.controller new AbortController()}abort() {this.controller.abort()} }// 创建 axios 实例 const service axios.create({baseURL: process.env.VUE_APP_BASE_API,…...
在 Laravel 12 中实现 WebSocket 通信
在 Laravel 12 中实现 WebSocket 通信主要有两种主流方案:官方推荐的 Laravel Reverb 和 第三方库(如 Soketi/Pusher 或 Workerman/Swoole)。以下是详细实现步骤: 一、官方方案:Laravel Reverb(推…...
iPhone或iPad想要远程投屏到Linux系统电脑,要怎么办?
苹果手机自带AirPlay投屏功能,对于苹果电脑,自然可以随时投屏。但如果电脑是Linux系统,而且还想要远程投屏呢?这时候要怎么将iPhone或iPad投屏到Linux电脑? 方法很简单,用AirDroid Cast的网页版即可。 步骤…...
Ubuntu 22.04 安装配置远程桌面环境指南
在云服务器或远程主机上安装图形化桌面环境,可以极大地提升管理效率和用户体验。本文将详细介绍如何在 Ubuntu 22.04 (Jammy Jellyfish) 系统上安装和配置 Xfce4 桌面环境,并通过 VNC 实现远程访问。 系统环境 操作系统:Ubuntu 22.04 LTS (Jammy Jellyfish)架构:AMD64安装…...
【Redis | 基础总结篇 】
目录 前言: 1.Redis的介绍: 2.Redis的类型与命令: 3.Redis的安装: 3.1.Windows版本 3.2.Linux版本 4.在java中使用Redis: 4.1.介绍 4.2.Jedis 4.3.Spring Data Redis 前言: 本篇主要讲述了Redis的…...
如何通过外网访问内网?对比5个简单的局域网让互联网连接方案
在实际应用中,常常需要从外网访问内网资源,如远程办公访问公司内部服务器、在家访问家庭网络中的设备等。又或者在本地内网搭建的项目应用需要提供互联网服务。以下介绍几种常见的外网访问内网、内网提供公网连接实现方法参考。 一、公网IP路由器端口映…...
iMeta | 临床研究+scRNA-seq的组合思路 | 真实世界新辅助研究,HER2⁺就一定受益?单细胞揭示真正的“疗效敏感克隆”
👋 欢迎关注我的生信学习专栏~ 如果觉得文章有帮助,别忘了点赞、关注、评论,一起学习 近年来,临床医学与单细胞组学的结合开启了全新的研究范式,让临床医生能以“显微镜”般的精度,深入理解疾病机制与疗效…...
国标GB28181视频平台EasyCVR安防系统部署知识:如何解决异地监控集中管理和组网问题
在企业、连锁机构及园区管理等场景中,异地监控集中管控与快速组网需求日益迫切。弱电项目人员和企业管理者亟需整合分散监控资源,实现跨区域统一管理与实时查看。 一、解决方案 案例一:运营商专线方案 利用运营商专线,连接各分…...
220V降12V1000mA非隔离芯片WT5110
220V降12V1000mA非隔离芯片WT5110 以下是采用WT5110芯片的非隔离降压电源电路设计,将220V电压转换为12V、1000mA输出: 一、WT5110芯片简介 WT5110是一款用于非隔离降压应用的集成电路,具备宽输入电压范围和高效的转换功能。它可以将高输入电…...
【ES】Elasticsearch字段映射冲突问题分析与解决
在使用Elasticsearch作为搜索引擎时,经常会遇到一些映射(Mapping)相关的问题。本文将深入分析字段映射冲突问题,并通过原生的Elasticsearch API请求来复现和解决这个问题。 问题描述 在实际项目中,我们遇到以下错误: Transport…...
【上位机——MFC】绘图
相关类 CDC类(绘图设备类):封装了各种绘图相关的函数,以及两个非常重要的成员变量m_hDC和m_hAttribDC CPaintDC类,封装了在WM_PAINT消息中绘图的绘图设备 CClientDC类,封装了在客户区绘图的绘图设备 CGdiObject类(绘图对象类) 封…...