transforms数据预处理【图像增强】 ->(个人学习记录笔记)

news2024/11/26 18:45:58

文章目录

    • 1. 安装
    • 2. transforms——Crop 裁剪
      • 2.1 `transforms.CenterCrop`
      • 2.2 `transforms.RandomCrop`
      • 2.3 `transforms.RandomResizedCrop`
      • 2.4 `transforms.FiveCrop`
      • 2.5 `transforms.TenCrop`
    • 3. transforms——Flip 翻转
      • 3.1 `transforms.RandomHorizontalFlip`
      • 3.2 `transforms.RandomVerticalFlip`
      • 3.3 `transforms.RandomRotation`
    • 4. 图像变换
      • 4.1 `transforms.Pad`
      • 4.2 `transforms.ColorJitter`
      • 4.3 `transforms.Grayscale`
      • 4.4 `transforms.RandomGrayscale`
      • 4.5 `transforms.RandomAffine`
      • 4.6 `transforms.RandomErasing`
      • 4.7 `transforms.Lambda`
      • 4.8 `transforms.Resize`
      • 4.9 `transforms.Totensor`
      • 4.10 `transforms.Normalize`
    • 5. transforms的操作
      • 5.1 `transforms.RandomChoice`
      • 5.2 `transforms.RandomApply`
      • 5.3 `transforms.RandomOrder`
    • 6. 自定义transforms
    • 汇总
      • transforms方法

数据增强又称为数据增广、数据扩增,它是对训练集进行变换,使训练集更丰富,从而让模型更具泛化能力。

注意: 下面图片大小通过markdown代码,图片比例有所更改(=400x)

1. 安装

# 在进行下面代码学习前需要安装torchvision==0.8.2
!pip install torchvision==0.8.2 --user  #在jupyter notebook中pip前面要加上感叹号
# 常规情况
pip install torchvision==0.8.2
from PIL import Image
from torchvision import transforms as T
import torch as t

to_tensor = T.ToTensor()
to_pil = T.ToPILImage()
dog = Image.open('./dog.jpeg')  # 从网上下载图片到本地后,再上传至DSW

2. transforms——Crop 裁剪

2.1 transforms.CenterCrop

torchvision.transforms.CenterCrop(size)
  • 功能:从图像中心裁剪图片
  • size:所需裁剪图片尺寸

2.2 transforms.RandomCrop

torchvision.transforms.RandomCrop(size, padding=None, pad_tf_needed=False, fill=0, padding_mode='constant')
  • 功能:从图片中随机裁剪出尺寸为size的图片
  • size: 所需裁剪图片尺寸
  • padding: 设置填充大小
    当为a时,上下左右均填充a个像素;
    当为(a, b)时,上下填充b个像素,左右填充a个像素;
    当为(a, b, c, d)时,左、上、右、下分别填充a、b、c、d。
  • pad_if_need: 若图像小于设定size,则填充
  • padding_mode: 填充模式,有4种模式
    ⅰ. constant: 默认模式,像素值由fill设定
    ⅱ. edge: 边缘填充,像素值由图像边缘像素设定
    ⅲ. reflect: 镜像填充,最后一个像素不镜像,例: [ 1 , 2 , 3 , 4 ] → [ 3 , 2 , 1 , 2 , 3 , 4 , 3 , 2 ] [1, 2, 3, 4]→[3, 2, 1, 2, 3, 4, 3, 2] [1,2,3,4][3,2,1,2,3,4,3,2]
    ⅳ. symmetric: 镜像填充,最后一个像素镜像,例: [ 1 , 2 , 3 , 4 ] → [ 2 , 1 , 1 , 2 , 3 , 4 , 4 , 3 ] [1, 2, 3, 4]→[2, 1, 1, 2, 3, 4, 4, 3] [1,2,3,4][2,1,1,2,3,4,4,3]
  • fill: constant时,设置填充的像素值

2.3 transforms.RandomResizedCrop

torchvision.transforms.RandomResizedCrop(size, scale=(0.08, 1.0), ratio=(3/4, 4/3), interpolation=2)
  • 功能随机大小、长宽比裁剪图片
  • size: 所需裁剪图片尺寸
  • scale: 随机裁剪面积比例,默认(0.08, 1)
  • ratio: 随机长宽比,默认(3/4, 4/3)
  • interpolation: 插值方法
    PIL.Image.NEAREST 最邻近插值
    PIL.Image.BILINEAR 双线性插值
    PIL.Image.BICUBIC 双三次插值

2.4 transforms.FiveCrop

torchvision.transforms.FiveCrop(size)
  • 功能上下左右中心裁剪

2.5 transforms.TenCrop

torchvision.transforms.TenCrop(size, vertical_flip=False)
  • 功能上下左右中心裁剪后翻转,在图像的上下左右以及中心裁剪出尺寸为size的5张图片,TenCrop对这5张图片进行水平或者垂直镜像获得10张图片,
  • size: 所需裁剪图片尺寸
  • vertical_flip: 是否垂直翻转

transforms.Compose()使用

# torchvision.transforms.CenterCrop
# Compose装载操作组合的容器
# 定义Compose 先缩放 后中心裁剪 最后转为tensor张量
transforms = T.Compose([T.Resize(224),T.CenterCrop(224),T.ToTensor()])
# 传入transforms中的数据是PIL数据,lena_t为tensor
dog_t = transforms(dog)  
# 3*224*224 ; 当T.CenterCrop()的参数大于T.Resize()的参数时,周围用0填充
dog_t.shape  
# 最后再转换格式为PILImage
to_pil(dog_t)

这是原图:
在这里插入图片描述
处理过后:
在这里插入图片描述

# torchvision.transforms.CenterCrop
# Compose装载操作组合的容器
# 定义Compose 先缩放 后随机裁剪,上下填充64 左右填充16 最后转为tensor张量
transforms = T.Compose([T.Resize(224),T.RandomCrop(224, padding=(16, 64)),T.ToTensor()])  
# 传入transforms中的数据是PIL数据,lena_t为tensor
dog_t = transforms(dog)  
# 3*224*224 ; 当T.CenterCrop()的参数大于T.Resize()的参数时,周围用0填充
dog_t.shape  
# 最后再转换格式为PILImage
to_pil(dog_t)
# Resize:缩放

这是原图:
在这里插入图片描述
处理过后:
在这里插入图片描述

3. transforms——Flip 翻转

3.1 transforms.RandomHorizontalFlip

torchvision.transforms.RandomHorizontalFlip(p=0.5)
  • 功能随机水平翻转

3.2 transforms.RandomVerticalFlip

torchvision.transforms.RandomVerticalFlip(p=0.5)
  • 功能依据水平(左右)或垂直(上下)翻转图片(随机垂直翻转)
  • p: 翻转概率

3.3 transforms.RandomRotation

torchvision.transforms.RandomRotation(degrees, resample=False, expand=False, center=None)
  • 功能随机旋转图片
  • degrees: 旋转角度
    当为a时,在(-a, a)之间选择旋转角度;
    当为(a, b)时,在(a, b)之间选择旋转角度。
  • resample: 重采样方法
  • expand: 是否扩大图片,以保持原图信息
  • center: 中心 例如 (0, 0)
# torchvision.transforms.RandomHorizontalFlip
# 随机水平翻转 
# 定义Compose 先缩放 后根据概率随机水平翻转 最后转为tensor张量
transforms = T.Compose([T.Resize(224),T.RandomHorizontalFlip(p=0.5),T.ToTensor()])  
# 传入transforms中的数据是PIL数据,lena_t为tensor
dog_t = transforms(dog)  
# 3*224*224 ; 当T.CenterCrop()的参数大于T.Resize()的参数时,周围用0填充
dog_t.shape 
to_pil(dog_t)

这是原图:
在这里插入图片描述
处理过后:
在这里插入图片描述

# torchvision.transforms.RandomRotation
# 随机翻转 
# 定义Compose 先缩放 后随机旋转 30° 旋转中心(0, 0) 扩大图片 最后转为tensor张量
transforms = T.Compose([T.Resize(224),T.RandomRotation(30, center=(0, 0), expand=True),T.ToTensor()])  # Resize:缩放
# 传入transforms中的数据是PIL数据,lena_t为tensor
dog_t = transforms(dog)  
# 3*224*224 ; 当T.CenterCrop()的参数大于T.Resize()的参数时,周围用0填充
dog_t.shape 
to_pil(dog_t)

这是原图:
在这里插入图片描述
处理过后:
在这里插入图片描述

4. 图像变换

4.1 transforms.Pad

torchvision.transforms.Pad(padding, fill=0, padding_mode='constant')
  • 功能对图像边缘进行填充
  • padding: 设置填充大小
    当为a时,上下左右均填充a个像素;
    当为(a, b)时,上下填充b个像素,左右填充a个像素;
    当为(a, b, c, d)时,左、上、右、下分别填充a、b、c、d。
  • padding_mode: 填充模式,有4种模式,constantedgereflectsymmetric 见上边详细
  • fill: constant时,设置填充的像素值,(R, G, B)or(Gray)
# constant padding 上下左右 20 填充红色RGB 
transforms = T.Compose([T.Resize(224),T.Pad(padding=20, fill=(255, 0, 0), padding_mode='constant'),T.ToTensor()])  # Resize:缩放

这是原图:
在这里插入图片描述
处理过后:
在这里插入图片描述

# 镜像填充。这时`padding_mode`属性不是`constant`, fill 属性不再生效。
transforms = T.Compose([T.Resize(224),T.Pad(padding=(6, 12, 24, 48), fill=(255, 0, 0), padding_mode='symmetric'),T.ToTensor()])  # Resize:缩放

这是原图:
在这里插入图片描述
处理过后:
在这里插入图片描述

4.2 transforms.ColorJitter

torchvision.transforms.ColorJitter(brightness=0, contrast=0, saturation=0, hue=0)
  • 功能调整亮度、对比度、饱和度和色相
  • brightness: 亮度调整因子
    当为a时,从 [𝑚𝑎𝑥(0,1−𝑎),1+𝑎] 中随机选择;
    当为(a, b)时,从 [𝑎,𝑏] 中随机选择。
  • contrast: 对比度参数,同brightness
  • saturation: 饱和度参数,同brightness
  • hue: 色相参数
    当为a时,从 [−𝑎,𝑎] 中选择参数,注: 0≤𝑎≤0.5
    当为(a, b)时,从 [𝑎,𝑏] 中选择参数,注: −0.5≤𝑎≤𝑏≤0.5
transforms = T.Compose([T.Resize(224),T.ColorJitter(brightness=0.5, contrast=0.5, saturation=0.5, hue=0.3),T.ToTensor()])  # Resize:缩放

狗狗颜色不太明显,换成了一只猫
这是原图:
在这里插入图片描述
处理过后:
在这里插入图片描述

4.3 transforms.Grayscale

torchvision.transforms.Grayscale(num_output_channels=1)
  • 功能将图片转换为灰度图
  • num_output_channels: 输出的通道数。只能设置为 1 或者 3 (如果在后面使用了transforms.Normalize,则要设置为 3,因为transforms.Normalize只能接收 3 通道的输入)

这是原图:
在这里插入图片描述
处理过后:

4.4 transforms.RandomGrayscale

torchvision.transforms.RandomGrayscale(p=0.1)
  • 功能依概率将图片转换为灰度图
  • p: 概率值,图像被转换为灰度图的概率
transforms = T.Compose([T.Resize(224),T.RandomGrayscale(p=0.5),T.ToTensor()])  

4.5 transforms.RandomAffine

torchvision.transforms.RandomAffine(degrees, translate=None, scale=None, shear=None, resample=0, fillcolor=0)
  • 功能对图像进行仿射变换,仿射变换是二维的线性变换,由五种基本原子变换构成,分别是旋转、平移、缩放、错切和翻转
  • translate: 平移区间设置,如(a, b),a设置宽(width),b设置高(height),图像在宽维度平移区间为 - img_width×a < dx < img_width×a
  • scale: 缩放比例(以面积为单位)
  • fill_color: 填充颜色设置
  • shear: 错切角度设置,有水平错切和垂直错切
    若为a,则仅在x轴错切,错切角度在(-a, a)之间;
    若为(a, b),则a设置x轴角度,b设置y的角度;
    若为(a, b, c, d),则a、b设置x轴角度,c、d设置y轴角度。
  • resample: 重采样方式,有NEAREST、BILINEAR、BICUBIC
# 中心旋转 30 度
transforms = T.Compose([T.Resize(224),T.RandomAffine(30),T.ToTensor()]) 

这是原图:
在这里插入图片描述
处理过后:
在这里插入图片描述

# 平移
transforms = T.Compose([T.Resize(224),T.RandomAffine(degrees=0, translate=(0.5, 0.3)),T.ToTensor()])

这是原图:
在这里插入图片描述处理过后:
在这里插入图片描述

# 缩放
transforms = T.Compose([T.Resize(224),T.RandomAffine(degrees=0, scale=(0.6, 0.6)),T.ToTensor()])  # Resize:缩放

这是原图:
在这里插入图片描述
处理过后:
在这里插入图片描述

# 错切
transforms = T.Compose([T.Resize(224),T.RandomAffine(degrees=0, shear=(0, 30, 0, 30)),T.ToTensor()]) 

这是原图:
在这里插入图片描述
处理过后:
在这里插入图片描述

# 错切
transforms = T.Compose([T.Resize(224),T.RandomAffine(degrees=0, shear=30, fillcolor=(255, 0, 0)),T.ToTensor()])

这是原图:
在这里插入图片描述
处理过后:
在这里插入图片描述

4.6 transforms.RandomErasing

torchvision.transforms.RandomErasing(p=0.5, scale=(0.02, 0.33), ratio=(0.3, 3.3), value=0, inplace=False)
  • 功能对图像进行随机遮挡
  • p: 概率值,执行该操作的概率
  • scale: 遮挡区域的面积
  • ratio: 遮挡区域长宽比
  • value: 设置遮挡区域的像素值,(R, G, B)or(Gray)
# 对图像进行随机遮挡。
# 输入是 tensor  先执行transforms.ToTensor()
transforms = T.Compose([T.Resize(224), T.ToTensor(), T.RandomErasing(p=0.5, scale=(0.03, 0.32), ratio=(0.2, 3.0), value=0, inplace=False)])

这是原图:
在这里插入图片描述
处理过后:
在这里插入图片描述

transforms = T.Compose([T.Resize(224), T.ToTensor(), T.RandomErasing(p=1, scale=(0.03, 0.32), ratio=(0.2, 3.0), value='random')])

在这里插入图片描述

4.7 transforms.Lambda

torchvision.transforms.Lambda(lambd)
  • 功能用户自定义lambda方法
  • lambd: lambda匿名函数
    例如:transforms.Lambda(lambda crops: torch.stack([transforms.Totensor()(crop) for crop in crops]))

4.8 transforms.Resize

  • 功能将输入图像(PIL Image or Tensor)调整为给定的大小。如果图像是torch张量,则期望它具有[C,H, W]形状,C其中表示任意数量的张量维度
  • size (sequence or int): 期望输出大小。如果size是(h, w)这样的序列,则输出size将与此匹配。如果size为int,图像的较小边缘将匹配此数字。即,如果高度>宽度,那么图像将被重新缩放为(size*高度/宽度,size)
  • interpolation (InterpolationMode): 由torchvision.transforms.InterpolationMode定义的期望插值枚举。默认为InterpolationMode.BILINEAR。如果输入是张量,只有InterpolationMode
  • max_size (int, optional): 调整后图像的长边允许的最大值:如果根据size调整后图像的长边大于max size,则再次调整图像,使长边等于max size。因此,size可能被否决,即较小的边可能比大小短。这只在size为int(或在torchscript模式下长度为1的序列)时才支持。
  • antialias (bool, optional): 抗锯齿标志。如果img是PIL Image,该标志将被忽略,并且始终使用反别名。如果img是Tensor,该标志默认为False, InterpolationMode可以设置为True。双线性和插值模式。双三次的模式。这有助于使PIL图像的输出和张量更接近。

4.9 transforms.Totensor

  • 功能:将原始的PILImage格式或者numpy.array格式的数据格式化为可被pytorch快速处理的张量类型。
    输入模式为(L、LA、P、I、F、RGB、YCbCr、RGBA、CMYK、1)的PIL Image或numpy.ndarray (形状为H x W x C)数据范围是[0, 255] 到一个Torch.FloatTensor,其形状 (C x H x W) 在 [0.0, 1.0] 范围内。
import numpy as np
from torchvision import transforms

a = np.random.random((224,224,3))
transform = transforms.Compose([
    transforms.ToTensor()
])
b = transform(a)
print(b.shape)
# torch.Size([3, 224, 224])

4.10 transforms.Normalize

数据标准化,即均值为0,标准差为1

  • 功能:要将图像三个通道的数据 整理到 [-1,1] 之间 ,可以加快模型的收敛
    对图像张量的每一个数据进行如下公式操作:
    output[channel] = (input[channel] - mean[channel]) / std[channel],
    返回归一化张量图像 (返回类型 type)
  • mean:(sequence)每个通道的均值序列
  • std:(sequence)每个通道的标准差序列
  • inplace:(bool,可选)bool值,使该操作就地执行

5. transforms的操作

5.1 transforms.RandomChoice

torchvision.transforms.RandomChoice(transforms)
  • 功能:从一系列transforms方法中随机挑选一个

5.2 transforms.RandomApply

torchvision.transforms.RandomApply(transforms, p=0.5)
  • 功能依据概率执行一组transforms操作

5.3 transforms.RandomOrder

torchvision.transforms.RandomOrder(transforms)
  • 功能:对一组transforms操作打乱顺序

6. 自定义transforms

自定义transforms要素

  • 仅接收一个参数,返回一个参数
  • 注意上下游的输出与输入
class Compose(object):
    def __call__(self, img):
        for t in transforms:
            img = t(img)
        return img

通过类实现多参数传入:

class YourTransforms(object):
    def __init__(self, transforms):
        self.transforms = transforms
    def __call__(self, img):
        for t in self.transforms:
            img = t(img)
        return img

椒盐噪声又称为脉冲噪声,是一种随机出现的白点或者黑点,白点称为盐噪声,黑色为椒噪声。
信噪比(Signal-Noise Rate,SNR)是衡量噪声的比例,图像中为图像像素的占比。

class AddPepperNoise(object):
    def __init__(self, snr, p):
        self.snr = snr
        self.p = p
    def __call__(self, img):
        # 添加椒盐噪声具体实现过程
        img = None
        return img

汇总

transforms方法

  1. 裁剪
    a. transforms.CenterCrop
    b. transforms.RandomCrop
    c. transforms.RandomResizedCrop
    d. transforms.FiveCrop
    e. transforms.TenCrop
  2. 翻转和旋转
    a. transforms.RandomHorizontalFlip
    b. transforms.RandomVerticalFlip
    c. transforms.RandomRotation
  3. 图像变换
    a. transforms.Pad
    b. transforms.ColorJitter
    c. transforms.Grayscale
    d. transforms.RandomGrayscale
    e. transforms.RandomAffine
    f. transforms.LinearTransformation
    g. transforms.RandomErasing
    h. transforms.Lambda
    i. transforms.Resize
    j. transforms.Totensor
    k. transforms.Normalize
  4. transforms的操作
    a. transforms.RandomChoice
    b. transforms.RandomApply
    c. transforms.RandomOrder

部分学习内容来自: 天池实验室

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

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

相关文章

Bash脚本学习:AWK, SED

1. AWK AWK 是一种编程语言&#xff0c;设计用于处理文件或数据流中基于文本的数据&#xff0c;或者使用 shell 管道。 可以将 awk 与 shell 脚本结合使用或直接在 shell 提示符下使用。 以上展示使用AWK分别打印第一个位置变量和第二个位置变量。 建立一个文档 csvtest.cs…

【前端知识】Three 学习日志(二)—— 加强三维空间认识

Three 学习日志&#xff08;二&#xff09;—— 加强三维空间认识 一、设置辅助观察坐标系 // 创建3D场景对象Scene const scene new THREE.Scene(); // AxesHelper&#xff1a;辅助观察的坐标系 const axesHelper new THREE.AxesHelper(150); scene.add(axesHelper);二、设…

布局设计和实现:计算器UI【TableLayout、GridLayout】

一、使用TableLayout实现计算器UI 1.新建一个空白项目布局 根据自己的需求输入其他信息 填写完成后&#xff0c;点击Finish即可 2. 设计UI界面 在res/layout文件夹中的XML文件中创建UI界面。在这个XML文件中&#xff0c;您可以使用TableLayout来设计计算器界面。 2.1 创建l…

【PyTorch攻略(1/7)】 张量基本语法

一、说明 Tensor 是一种特殊的数据结构&#xff0c;与数组和矩阵非常相似。在 PyTorch 中&#xff0c;我们使用张量对模型的输入和输出以及模型的参数进行编码。 张量类似于 NumPy 和 ndarray&#xff0c;除了张量可以在 GPU 或其他硬件加速器上运行。事实上&#xff0c;张量和…

Navicat 连接数据库出现1251

原因&#xff1a; MySQL8.0以上版本的加密方式和MySQL5.0的不一样&#xff0c;所以Navicat连接MySQL会报错。 1251 - Client does not support authentication protocol requested by server; consider upgrading MysQl. cdient– 修改远程连接权限 % 可换为自己的电脑ip GRAN…

Spring Boot实现web.xml功能

Spring Boot实现web.xml功能 1. 基于注解实现1.1 组件注册1.2 WebInitParam注解 2. 基于编码实现2.1 Servlet & Filter2.2 Listener 3. 总结 在Spring Boot中&#xff0c;不再需要使用传统的 web.xml 文件来配置web应用的功能&#xff0c;Spring Boot支持通过注解和基于代码…

132.【MySQL_进阶】

MySQL_进阶 (一)、存储引擎1.MySQL体系结构(1).连接层(2).服务层(3).引擎层(4).存储层 2.存储引擎简介(1).查看某张表的数据引擎(2).展示此版本支持的所有存储引擎(3).创建表my_myisam,并指定MyIASM存储引擎(4).存储引擎示列 3.存储引擎 _ Innodb(1).Innodb 介绍(2).Innodb 特点…

展会预告 | 图扑邀您共聚 IOTE 国际物联网展·深圳站

参展时间&#xff1a;9 月 20 日- 22 日 图扑展位&#xff1a;9 号馆 9B 35-1 参展地址&#xff1a;深圳国际会展中心&#xff08;宝安新馆&#xff09; IOTE 2023 第二十届国际物联网展深圳站&#xff0c;将于 9 月 20 日- 22 日在深圳国际会展中心&#xff08;宝安&#xf…

C#,数值计算——Hashtable的计算方法与源程序

1 文本格式 using System; using System.Collections; using System.Collections.Generic; namespace Legalsoft.Truffer { public abstract class Hashtable<K> { private int nhash { get; set; } private int nmax { get; set; } pr…

基于反向推理的序列预测模型

序列预测是机器学习中的一个关键问题,涉及到频繁序列挖掘、时间序列预测、自然语言处理等多个领域。在预测模型中,一个关键的挑战就是如何有效地利用历史信息进行预测。目前,大多数预测模型都是基于历史信息进行前向推理,这种方法在输入序列不完全或未知的情况下,其预测效…

性能测试-性能工程全景图、实施方案、建设目标(20)

性能工程是一个关注系统性能层面的体系,包含测试环境的性能测试、生产环境的性能测试、性能调优、容量规划等多个方面 性能工程主要包括如下3个部分 ❑建设性能测试理论体系和流程规范、链路分析基础知识体系和流程规范、性能调优基础理论体系和流程规范。 ❑搭建高效协同的工…

Typora远程代码执行漏洞CVE-2023-2317

0x00 前言 漏洞详情 版本16.7以前的Typora中的updater/update.html存在基于DOM的XSS&#xff0c;可以通过加载定制的markdown文件实现任意javascript代码执行。 原理分析 漏洞触发点位于Typora的updater.html文件&#xff0c;通过特定协议typora://即可访问&#xff0c;同时…

PDF怎样加密?希望这些方法可以帮助大家

PDF怎样加密&#xff1f;我们平时会使用到非常多的pdf文件&#xff0c;相信大家也接触过这样一种pdf文件&#xff0c;当我们想要打开这个pdf文件的时候被告知需要输入一个密码后才能真正打开&#xff0c;都则这个文件你是无法打开的&#xff0c;这是因为这个pdf文件已经进行了加…

自动化和数字化在 ERP 系统中意味着什么?

毋庸置疑&#xff0c;ERP系统的作用是让工作更轻松。它可以集成流程&#xff0c;提供关键分析&#xff0c;确保你的企业高效运营。这些信息可以提高你的运营效率&#xff0c;并将有限的人力资本重新部署到更有效、更重要的需求上。事实上&#xff0c;自动化和数字化是ERP系统最…

思维导图怎么画好看又简单?看看这个方法

思维导图怎么画好看又简单&#xff1f;思维导图是一种非常有用的工具&#xff0c;可以帮助我们组织和展示思维。如果你想要画出既好看又简单的思维导图&#xff0c;那么我们可以使用一些思维导图制作工具。下面就给大家介绍一款个人觉得很好用的思维导图制作工具。 【迅捷画图】…

【八大经典排序算法】堆排序

【八大经典排序算法】堆排序 一、概述二、思路解读三、代码实现&#xff08;大堆为例&#xff09; 一、概述 堆排序是J.W.J. Williams于1964年提出的。他提出了一种利用堆的数据结构进行排序的算法&#xff0c;并将其称为堆排序。堆排序是基于选择排序的一种改进&#xff0c;通…

嵌入式应用范围为什么这么广?

嵌入式应用范围为什么这么广&#xff1f; 嵌入式技术的应用范围远比我们想象的要广泛。从传统的角度看&#xff0c;空调、电饭煲、电风扇、冰箱、遥控器、路由器、洗衣机、智能手机、投影仪、音响等等&#xff0c;几乎每天都在使用的产品都离不开嵌入式技术。 而随着互联网的…

【力扣周赛】第 363 场周赛(完全平方数和质因数分解)

文章目录 竞赛链接Q1&#xff1a;100031. 计算 K 置位下标对应元素的和竞赛时代码写法2——手写二进制中1的数量 Q2&#xff1a;100040. 让所有学生保持开心的分组方法数&#xff08;排序后枚举分界&#xff09;竞赛时代码 Q3&#xff1a;100033. 最大合金数&#xff08;二分答…

400电话客服中心电话:为您提供全方位的客户服务

在现代商业环境中&#xff0c;提供优质的客户服务是企业成功的关键之一。为了满足客户的需求和解决问题&#xff0c;许多企业选择设立400电话客服中心。400电话是一种特殊的电话号码&#xff0c;可以通过固定电话和移动电话拨打&#xff0c;客户可以通过这个号码与企业进行沟通…

数据库问题记录(粗略版)oracle、mysql等主流数据库通用

1. ORA-00918&#xff1a;未明确定义列 该问题情况大致为&#xff1a;select 所取列名错误、重复等问题。 2. “select * from temp where 10; ”的含义 布尔值为FALSE&#xff0c;只返回表结构&#xff0c;不返回数据。 举一反三&#xff1a; select * from temp where 1&…