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

【学习笔记】深入浅出详解Pytorch中的View, reshape, unfold,flatten等方法。

文章目录

  • 一、写在前面
  • 二、Reshape
    • (一)用法
    • (二)代码展示
  • 三、Unfold
    • (一)torch.unfold 的基本概念
    • (二)torch.unfold 的工作原理
    • (三) 示例代码
    • (四)torch.unfold 的应用场景
    • (五)注意事项
    • (六)总结
  • 四、View
    • (一)用法
    • (二)注意事项
    • (三)其他方法
  • 五、Flatten
    • (一)torch.flatten 的基本概念
    • (二)torch.flatten 的工作原理
    • (三)示例代码
  • 六、Permute
    • (一)torch.permute 的基本概念
    • (二)torch.permute 的工作原理
    • (三) 示例代码
    • (四) torch.permute 的应用场景
  • 七、总结

一、写在前面

最近在解析transformer源码的时候突然看到了unfold?我在想unfold是什么意思?为什么不用reshape,他们的底层逻辑有什么区别呢?于是便相对比一下他们之间的区别,便有了本篇博客,希望对大家有帮助!

二、Reshape

(一)用法

1. torch.reshape(input, shape)
输入是tensor和shape,其中原始shape和目标shape的元素数量要一致。

2. Tensor.reshape(shape) → Tensor
与上述用法一致,只不过这个是直接在tensor的基础上进行reshape。

reshpe是按照顺序进行重新排列组合的。
[16,2] 其实与 [4,2,2,2] 是一样的,只要最后一维的数字是一样,其实结果都是一样的。

(二)代码展示

三、Unfold

(一)torch.unfold 的基本概念

torch.unfold 的作用是将输入张量的某个维度展开为多个滑动窗口。每个窗口包含一个局部区域,这些区域可以用于后续的计算。

  1. 语法:
torch.Tensor.unfold(dimension, size, step)
  1. 参数:
    • dimension:要展开的维度(整数)。
    • size:滑动窗口的大小(整数)。
    • step:滑动窗口的步长(整数)。
    • 返回值:返回一个新的张量,其中指定维度的每个元素被展开为多个滑动窗口。

(二)torch.unfold 的工作原理

假设我们有一个形状为 (N, C, H, W) 的张量(例如图像数据),我们希望在高度维度(H)上提取滑动窗口。

  • 输入张量:(N, C, H, W)
  • 展开维度:dimension=2(即高度维度 H)
  • 窗口大小:size=k(例如 k=3)
  • 步长:step=s(例如 s=1)

torch.unfold 会将高度维度 H 展开为多个大小为 k 的滑动窗口,每个窗口之间间隔 s。

(三) 示例代码

  • 示例 1:一维张量的展开
import torch
# 创建一个一维张量
x = torch.arange(10)
print("原始张量:", x)# 使用 unfold 展开
unfolded = x.unfold(dimension=0, size=3, step=1)
print("展开后的张量:\n", unfolded)
  • 输出:
原始张量: tensor([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
展开后的张量:tensor([[0, 1, 2],[1, 2, 3],[2, 3, 4],[3, 4, 5],[4, 5, 6],[5, 6, 7],[6, 7, 8],[7, 8, 9]])
  • 示例 2:二维张量的展开(图像处理)
import torch
# 创建一个二维张量(模拟图像)x = torch.arange(16).reshape(1, 1, 4, 4)  # 形状为 (1, 1, 4, 4)print("原始张量:\n", x)# 使用 unfold 展开unfolded_1 = x.unfold(dimension=2, size=3, step=1)unfolded_2 = unfolded_1.unfold(dimension=3, size=3, step=1)print("展开后的张量形状:", unfolded_1.shape)print("展开后的张量:\n", unfolded_1)print("展开后的张量形状:", unfolded_2.shape)print("展开后的张量:\n", unfolded_2)
  • 输出:
原始张量:tensor([[[[ 0,  1,  2,  3],[ 4,  5,  6,  7],[ 8,  9, 10, 11],[12, 13, 14, 15]]]])
展开后的张量形状: torch.Size([1, 1, 2, 4, 3])
展开后的张量:tensor([[[[[ 0,  4,  8],[ 1,  5,  9],[ 2,  6, 10],[ 3,  7, 11]],[[ 4,  8, 12],[ 5,  9, 13],[ 6, 10, 14],[ 7, 11, 15]]]]])
展开后的张量形状: torch.Size([1, 1, 2, 2, 3, 3])
展开后的张量:tensor([[[[[[ 0,  1,  2],[ 4,  5,  6],[ 8,  9, 10]],[[ 1,  2,  3],[ 5,  6,  7],[ 9, 10, 11]]],[[[ 4,  5,  6],[ 8,  9, 10],[12, 13, 14]],[[ 5,  6,  7],[ 9, 10, 11],[13, 14, 15]]]]]])

数组的运算主要看最后两维,倒数第二维代表行,倒数第一维代表列。

(四)torch.unfold 的应用场景

  1. 卷积操作

在卷积神经网络(CNN)中,卷积核通过滑动窗口的方式提取图像的局部特征。torch.unfold 可以用于手动实现卷积操作。

  1. 图像处理

在图像处理中,torch.unfold 可以用于提取图像的局部区域(例如提取图像的滑动窗口)。

  1. 时间序列分析

在时间序列分析中,torch.unfold 可以用于提取时间序列的滑动窗口,用于特征提取或模型训练。

(五)注意事项

  1. 维度选择:需要明确指定要展开的维度(dimension)。
  2. 窗口大小和步长:窗口大小(size)和步长(step)的选择会影响展开后的张量形状。
  3. 内存消耗:torch.unfold 可能会生成较大的张量,尤其是在高维数据上使用时,需要注意内存消耗。

(六)总结

  1. torch.unfold 的作用:从张量的某个维度提取滑动窗口。
  2. 常用参数:dimension(展开维度)、size(窗口大小)、step(步长)。
  3. 应用场景:卷积操作、图像处理、时间序列分析等。
  4. 注意事项:选择合适的维度、窗口大小和步长,避免内存消耗过大。

四、View

torch.view 用于返回一个与原始张量共享相同数据存储的新张量,但具有不同的形状。换句话说,view 只是改变了张量的视图(view),而不会复制数据。

(一)用法

  1. Tensor.view(*shape):
    • 参数:

    *shape:新的形状(可以是整数或元组)。

    • 返回值:

    返回一个新的张量,具有指定的形状,并与原始张量共享相同的数据存储。

(二)注意事项

  1. view 返回的张量与原始张量共享相同的数据存储。
  2. 如果原始张量的数据发生变化,view 返回的张量也会随之变化。
  3. view 要求张量的内存必须是连续的(即张量在内存中是连续存储的)。如果内存不连续,view 会抛出错误。

(三)其他方法

  1. view_as
  • 作用:将当前张量转换为与另一个张量相同的形状。
  • 语法:
torch.Tensor.view_as(other)
  • 参数:

other:目标张量,当前张量的形状将被转换为与 other 相同的形状。

  • 返回值:

返回一个新的张量,具有与 other 相同的形状,并与原始张量共享数据存储。

  • 示例:
import torch
# 创建一个张量
x = torch.arange(12)
print("原始张量:", x)
# 创建目标张量
other = torch.empty(3, 4)
# 使用 view_as 改变形状
y = x.view_as(other)
print("改变形状后的张量:\n", y)
  • 输出:
原始张量: tensor([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])
改变形状后的张量:tensor([[ 0,  1,  2,  3],[ 4,  5,  6,  7],[ 8,  9, 10, 11]])
  1. view_as_real
  • 作用:将复数张量转换为实数张量。
  • 语法:
torch.Tensor.view_as_real()
  • 返回值:

返回一个新的实数张量,形状为 (…, 2),其中最后一个维度包含复数的实部和虚部。

  • 示例:
import torch
# 创建一个复数张量
x = torch.tensor([1 + 2j, 3 + 4j])
print("原始张量:", x)
# 使用 view_as_real 转换为实数张量
y = x.view_as_real()
print("转换后的张量:\n", y)
  • 输出:
原始张量: tensor([1.+2.j, 3.+4.j])
转换后的张量:tensor([[1., 2.],[3., 4.]])
  1. view_as_complex
  • 作用:将实数张量转换为复数张量。
  • 语法:
torch.Tensor.view_as_complex()
  • 返回值:

返回一个新的复数张量,形状为 (…,),其中最后一个维度被解释为复数的实部和虚部。

  • 示例:
import torch
# 创建一个实数张量
x = torch.tensor([[1., 2.], [3., 4.]])
print("原始张量:\n", x)
# 使用 view_as_complex 转换为复数张量
y = x.view_as_complex()
print("转换后的张量:", y)
  • 输出:
原始张量:tensor([[1., 2.],[3., 4.]])
转换后的张量: tensor([1.+2.j, 3.+4.j])
  1. view_as_strided
  • 作用:返回一个具有指定步长和内存布局的张量视图。
  • 语法:
torch.Tensor.view_as_strided(size, stride)
  • 参数:

size:新的形状(元组)。
stride:新的步长(元组)。

  • 返回值:

返回一个新的张量,具有指定的形状和步长,并与原始张量共享数据存储。

  • 示例:
import torch
# 创建一个张量
x = torch.arange(9).view(3, 3)
print("原始张量:\n", x)
# 使用 view_as_strided 改变形状和步长
y = x.view_as_strided((2, 2), (1, 2))
print("改变形状和步长后的张量:\n", y)
  • 输出:
原始张量:tensor([[0, 1, 2],[3, 4, 5],[6, 7, 8]])
改变形状和步长后的张量:tensor([[0, 2],[1, 3]])
  1. view_as_real 和 view_as_complex 的应用场景
  • 复数计算:

在涉及复数计算的任务中,view_as_real 和 view_as_complex 可以用于在复数和实数之间进行转换。

  • 信号处理:

在信号处理中,复数张量常用于表示频域信号,view_as_real 和 view_as_complex 可以用于频域和时域之间的转换。

  1. view_as_strided 的应用场景
  • 自定义内存布局:

在需要自定义内存布局的场景中,view_as_strided 可以用于创建具有特定步长和形状的张量视图。

  • 高效内存访问:

在需要高效访问内存的场景中,view_as_strided 可以用于优化内存访问模式。

五、Flatten

(一)torch.flatten 的基本概念

torch.flatten 的作用是将输入张量的指定维度展平为一维。它可以展平整个张量,也可以只展平部分维度。

  1. 语法:
torch.flatten(input, start_dim=0, end_dim=-1)
  1. 参数:

    • input:输入张量。
    • start_dim:开始展平的维度(整数),默认为 0。
    • end_dim:结束展平的维度(整数),默认为 -1。
    • 返回值:返回一个新的张量,具有展平后的形状。

(二)torch.flatten 的工作原理

  1. torch.flatten 会将指定范围内的维度展平为一维。
  2. 如果 start_dim=0 且 end_dim=-1,则整个张量会被展平为一维。
  3. 如果只展平部分维度,则其他维度保持不变。

(三)示例代码

  • 示例 1:展平整个张量
import torch
# 创建一个二维张量
x = torch.arange(12).view(3, 4)
print("原始张量:\n", x)
# 使用 flatten 展平整个张量
y = torch.flatten(x)
print("展平后的张量:", y)
  • 输出:
原始张量:tensor([[ 0,  1,  2,  3],[ 4,  5,  6,  7],[ 8,  9, 10, 11]])
展平后的张量: tensor([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])
  • 示例 2:展平部分维度
import torch
# 创建一个三维张量
x = torch.arange(24).view(2, 3, 4)
print("原始张量:\n", x)
# 使用 flatten 展平第二个维度到第三个维度
y = torch.flatten(x, start_dim=1, end_dim=2)
print("展平后的张量:\n", y)
  • 输出:
原始张量:tensor([[[ 0,  1,  2,  3],[ 4,  5,  6,  7],[ 8,  9, 10, 11]],[[12, 13, 14, 15],[16, 17, 18, 19],[20, 21, 22, 23]]])
展平后的张量:tensor([[ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11],[12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23]])
  • 示例 3:展平特定维度
import torch
# 创建一个四维张量
x = torch.arange(24).view(2, 2, 3, 2)
print("原始张量:\n", x)
# 使用 flatten 展平第三个维度
y = torch.flatten(x, start_dim=2, end_dim=2)
print("展平后的张量:\n", y)
  • 输出:
原始张量:tensor([[[[ 0,  1],[ 2,  3],[ 4,  5]],[[ 6,  7],[ 8,  9],[10, 11]]],[[[12, 13],[14, 15],[16, 17]],[[18, 19],[20, 21],[22, 23]]]])
展平后的张量:tensor([[[ 0,  1,  2,  3,  4,  5],[ 6,  7,  8,  9, 10, 11]],[[12, 13, 14, 15, 16, 17],[18, 19, 20, 21, 22, 23]]])

六、Permute

(一)torch.permute 的基本概念

torch.permute 的作用是将输入张量的维度按照指定的顺序重新排列。它类似于 NumPy 中的 transpose,但更加灵活,可以同时对多个维度进行排列。

  1. 语法:
torch.Tensor.permute(*dims)
  1. 参数:
    • *dims:新的维度顺序(元组或多个整数)。
    • 返回值:返回一个新的张量,具有重新排列后的维度顺序,并与原始张量共享数据存储。

(二)torch.permute 的工作原理

torch.permute 会将输入张量的维度按照指定的顺序重新排列。
新的维度顺序必须与原始张量的维度数量相同,并且每个维度索引只能出现一次。

(三) 示例代码

  1. 示例 1:二维张量的转置
import torch
# 创建一个二维张量
x = torch.arange(12).view(3, 4)
print("原始张量:\n", x)# 使用 permute 转置
y = x.permute(1, 0)  # 将维度 0 和 1 交换
print("转置后的张量:\n", y)
  • 输出:
原始张量:tensor([[ 0,  1,  2,  3],[ 4,  5,  6,  7],[ 8,  9, 10, 11]])
转置后的张量:tensor([[ 0,  4,  8],[ 1,  5,  9],[ 2,  6, 10],[ 3,  7, 11]])
  1. 示例 2:三维张量的维度重排
import torch
# 创建一个三维张量
x = torch.arange(24).view(2, 3, 4)
print("原始张量:\n", x)# 使用 permute 重排维度
y = x.permute(2, 0, 1)  # 将维度 0, 1, 2 重排为 2, 0, 1
print("重排后的张量形状:", y.shape)
print("重排后的张量:\n", y)
  • 输出:
原始张量:tensor([[[ 0,  1,  2,  3],[ 4,  5,  6,  7],[ 8,  9, 10, 11]],[[12, 13, 14, 15],[16, 17, 18, 19],[20, 21, 22, 23]]])
重排后的张量形状: torch.Size([4, 2, 3])
重排后的张量:tensor([[[ 0,  4,  8],[12, 16, 20]],[[ 1,  5,  9],[13, 17, 21]],[[ 2,  6, 10],[14, 18, 22]],[[ 3,  7, 11],[15, 19, 23]]])
  1. 示例 3:四维张量的维度重排
import torch
# 创建一个四维张量
x = torch.arange(24).view(2, 2, 3, 2)
print("原始张量:\n", x)# 使用 permute 重排维度
y = x.permute(3, 1, 2, 0)  # 将维度 0, 1, 2, 3 重排为 3, 1, 2, 0
print("重排后的张量形状:", y.shape)
print("重排后的张量:\n", y)
  • 输出:
原始张量:tensor([[[[ 0,  1],[ 2,  3],[ 4,  5]],[[ 6,  7],[ 8,  9],[10, 11]]],[[[12, 13],[14, 15],[16, 17]],[[18, 19],[20, 21],[22, 23]]]])
重排后的张量形状: torch.Size([2, 2, 3, 2])
重排后的张量:tensor([[[[ 0, 12],[ 2, 14],[ 4, 16]],[[ 6, 18],[ 8, 20],[10, 22]]],[[[ 1, 13],[ 3, 15],[ 5, 17]],[[ 7, 19],[ 9, 21],[11, 23]]]])

(四) torch.permute 的应用场景

  1. 图像处理

在图像处理中,torch.permute 可以用于调整图像的通道顺序。例如,将 (C, H, W) 的图像张量转换为 (H, W, C)。

  1. 深度学习模型输入

在深度学习中,模型的输入张量通常需要特定的维度顺序。torch.permute 可以用于调整输入张量的维度顺序。

  1. 数据预处理

在数据预处理中,torch.permute 可以用于调整数据的维度顺序,以便进行后续的计算或操作。

如果每一维度都有特定的含义,此时想改变维度的时候用permute。

七、总结

  1. reshape 与 view 几乎一致, 甚至可以说reshape可以代替view;
  2. reshape 与 permute 的区别在于,reshape是按照顺序重新进行排列组合,permute是按照维度进行重新排列组合,如果各个维度都有特定的意义,那么permute会更合适。
  3. unfold是按照某一维度滑动选取数据,新增加一维,新增加的维度的大小为滑动窗口的大小,原始维度会根据滑动窗口和step的大小而变化。
  4. flatten也是按照顺序进行展开,且展开的是某个范围的维度,不是特定的维度。
  5. 不管是几维数组,主要看最后两维,倒数第二维代表行,倒数第一维代表列。

相关文章:

【学习笔记】深入浅出详解Pytorch中的View, reshape, unfold,flatten等方法。

文章目录 一、写在前面二、Reshape(一)用法(二)代码展示 三、Unfold(一)torch.unfold 的基本概念(二)torch.unfold 的工作原理(三) 示例代码(四&a…...

解决Presto dirver timestamp时区问题

#bigdata/metabase 一、背景介绍 1、Presto版本 使用阿里云集群的版本 EMR-5.4.2,Presto的版本为338; Facebook后续不再维护,Trino 351为首个版本 2、Metabase版本 历史版本为0.38.4,新版本为0.51.5 3、0.38.4 cast to time…...

【优选算法】Prefix-Kage:前缀和的算法影(上)

文章目录 1.概念解析2.代码实现2.1【模版】前缀和(一维)2.1.1 原理2.1.2 代码实现 2.2【模版】前缀和(二维)2.2.1 原理2.2.2 代码实现 希望读者们多多三连支持小编会继续更新你们的鼓励就是我前进的动力! 本篇是优选算…...

中阳科技:量化交易模型的技术革新与实践应用

在金融市场日益复杂化的今天,量化交易作为数据驱动的现代化交易方式,已成为金融领域发展的关键方向。中阳科技凭借深厚的技术积累与创新能力,积极探索量化交易模型的优化与应用,开辟了智能金融新局面。 量化交易的优势与市场前景…...

golang 判断一个点是否在一个多边形内

我有一需求为:判断一个点(经纬度范围)是否在一个多边形范围内(多个经纬度点) 这里我借助几何库( github.com/paulmach/orb)来处理地理空间数据 可以通过在线获取经纬度来确认代码正确性 packa…...

图论笔记1

1.1邻接矩阵储存法 //创建:二维数组vector<vector<int>> graph(n,vector<int>(n,0));//储存for(int i0;i<m;i){int x1,x2;cin>>x1>>x2;graph[x1-1][x2-1]1;}1.2邻接表储存法 补充&#xff1a;c中的list是链表 链接 //创建&#xff1a;数组…...

大模型QLoRA微调——基于Qwen2-7B的自动化病历摘要生成系统

01 项目简介 &#xff08;1&#xff09;项目背景 医疗文档中包含大量的诊疗信息&#xff0c;例如疾病诊断、手术名称、解剖部位、药物使用以及影像和实验室检查结果。这些信息是医疗数据分析的核心&#xff0c;但由于医疗文本内容复杂、格式多样&#xff0c;提取这些关键内容…...

CTFHub-ssrf

技能树--Web--SSRF 内网访问 开启题目 尝试访问位于127.0.0.1的flag.php吧 进入环境 根据提示输入即可 127.0.0.1/flag.php 伪协议读取文件 开启题目 尝试去读取一下Web目录下的flag.php吧 进入环境&#xff0c;根据提示输入 file:///var/www/html/flag.php 鼠标右键查看…...

使用ElasticSearch实现全文检索

文章目录 全文检索任务描述技术难点任务目标实现过程1. java读取Json文件&#xff0c;并导入MySQL数据库中2. 利用Logstah完成MySQL到ES的数据同步3. 开始编写功能接口3.1 全文检索接口3.2 查询详情 4. 前端调用 全文检索 任务描述 在获取到数据之后如何在ES中进行数据建模&a…...

【docker】容器编排之docker swarm

Docker Swarm容器编排详细讲解 Docker Swarm是Docker的原生容器编排工具&#xff0c;它通过将多个Docker引擎组合成一个集群来实现高效的容器部署和管理。 Swarm提供了服务发现、负载均衡、扩展、自动恢复等功能&#xff0c;能够让开发者和运维人员以更简便的方式管理容器化应…...

微信小程序苹果手机自带的数字键盘老是弹出收起,影响用户体验,100%解决

文章目录 1、index.wxml2、index.js3、index.wxss1、index.wxml <!--index.wxml--> <view class="container"><view class="code-input-container"><view class="code-input-boxes"><!-- <block wx:for="{{…...

SCAU期末笔记 - Linux系统应用与开发教程样卷解析(2024版)

我真的不理解奥&#xff0c;为什么会有给样卷不自带解析的&#xff0c;对答案都没得对&#xff0c;故整理一篇 样卷1 一、选择题 1、为了遍历shell脚本调用时传入的参数&#xff0c;需要在shell脚本中使用_____。 A.$#表示参数的个数B.S表示所有参数C.$0表示脚本名D.$1表示…...

2024 年贵州技能大赛暨全省第二届数字技术应用职业技能竞赛“信息通信网络运行管理员”赛项--linux安全题

Linux操作系统渗透测试 Nmap -sS -p- ip 扫描 这题有俩种做法&#xff0c;一种用3306端口&#xff0c;另一种用48119端口 用48119端口是最简单的做法 nc 连接这个端口如何修改root密码 ssh连接 这样我们就成功的拿到root权限 1.通过本地PC中渗透测试平台Kali对服务器场景进…...

CTFshow-php特性(Web125-150)

CTFshow-php特性(Web125-150) Web125 <?php error_reporting(0); highlight_file(__FILE__); include("flag.php"); $a$_SERVER[argv]; $c$_POST[fun]; if(isset($_POST[CTF_SHOW])&&isset($_POST[CTF_SHOW.COM])&&!isset($_GET[fl0g])){if(!p…...

机器学习一点基础

人工智能&#xff08;Artificial Intelligence, AI&#xff09;和机器学习&#xff08;Machine Learning, ML&#xff09;是当今最热门的技术领域之一。然而&#xff0c;初学者往往面对大量的术语和技术细节&#xff0c;不知道从何入手。本文将以通俗易懂的方式介绍机器学习的基…...

【C++】 While循环高级分析与实践扩展

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;While 循环基础知识1.1 基本语法形式1.2 if 与 while 的区别1.3 循环结构比较 &#x1f4af;While 循环实例分析2.1 执行结果2.2 计算流程分析 &#x1f4af;While 循环注意…...

React Native状态管理器Redux、MobX、Context API、useState

Redux、MobX、Context API、useState都是React中用于状态管理的工具&#xff0c;但它们各自有不同的特点和使用场景。 Redux 介绍&#xff1a; Redux是一个JavaScript状态管理库&#xff0c;最初由Dan Abramov和Andrew Clark于2015年开发。它基于Flux架构&#xff0c;强调状态…...

【AI系列】Paddle Speech安装指南

文章目录 环境依赖1. 安装Python1.1 下载Python安装包1.2 安装gcc1.3 安装依赖库1.4 编译和安装Python1.5 配置环境变量 2. 安装PaddlePaddle3. 安装PaddleSpeech4. 运行PaddleSpeech5. 解决常见问题5.1 错误&#xff1a;libssl.so.1.1解决方法&#xff1a; 5.2 错误&#xff1…...

【学习笔记总结】华为云:应用上云后的安全规划及设计

一、背景和问题 数字化时代&#xff0c;随着信息技术的飞速发展&#xff0c;企业和各类组织纷纷将自身的应用程序迁移至云端。云计算凭借其诸多优势&#xff0c;如成本效益、可扩展性、灵活性以及便捷的资源共享等&#xff0c;已然成为了现代业务运营的重要支撑。 今年&#xf…...

数据可视化-2. 条形图

目录 1. 条形图适用场景分析 1.1 比较不同类别的数据 1.2 展示数据分布 1.3 强调特定数据点 1.4 展示时间序列数据的对比 1.5 数据可视化教育 1.6 特定领域的应用 2. 条形图局限性 3. 条形图图代码实现 3.1 Python 源代码 3.2 条形图效果&#xff08;网页显示&#…...

设置Qt程序开机自启动(windows版本)

前言 本文展示在windows环境下&#xff0c;通过代码实现更改系统注册表的方式来实现程序的开机自动启动。 一、注册表 需要更改的系统注册表为: HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run 二、代码演示 1.头文件 头文件autorun.h #ifndef …...

LeetCode hot100-80

https://leetcode.cn/problems/partition-labels/description/?envTypestudy-plan-v2&envIdtop-100-liked 763. 划分字母区间 已解答 中等 相关标签 相关企业 提示 给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段&#xff0c;同一字母最多出现在一个片段中。…...

Ubuntu批量修改文件名

文章目录 批量重命名文件&#xff1a;Ubuntu下使用find命令结合sed和mv参考 批量重命名文件&#xff1a;Ubuntu下使用find命令结合sed和mv 在日常开发和文件管理中&#xff0c;有时我们需要批量重命名一批文件&#xff0c;比如将文件名中的某个特定字符串替换为另一个字符串。…...

CVMJ 2024 | StyleDiffusion: 基于Prompt嵌入的真实图像反演和文本编辑

论文&#xff1a;《StyleDiffusion: Prompt-Embedding Inversion for Text-Based Editing》 代码&#xff1a;https://github.com/sen-mao/StyleDiffusion​https://github.com/sen-mao/StyleDiffusion​ 问题背景 已有一些工作利用预训练扩散模型进行真实图像的编辑。这些方…...

UE5 帧数优化思路

A、思路 1、直接在GM的事件beginplay中改可延展性相对质量级别&#xff0c; 改为1或2&#xff0c;最简单粗暴的方式&#xff0c;而效果明显&#xff0c;帧数提高一倍&#xff0c;GPU占用率与显存占用直接下降一大截。在物体密集的地方卡顿会缓解很多&#xff0c;物体少的地方…...

【Java】正则表达式基础题+场景题练习

基础语法可以看我另一篇博客&#xff1a;正则表达式【规则】【实例】【技巧】_正则规则-CSDN博客 输出结果全是true public class StringRegexTest {public static void main(String[] args) {System.out.println(matchSingleNum("1"));System.out.println(matchMul…...

qq资料修改/空间操作

此工具仅支持 空间ck导入操作 发布说说 转发别人的动态分享 支持修改头像 修改昵称 空间权限获取 说说内容自定义 说放置说说图片 同样也支持多ck操作 详细支持如下 发布说说 转发分享 修改头像 修改昵称 允许空间 发送分享 设置访客权限 问题空间 清空相册 删除说说 封存三天…...

数据结构—图

目录 一、图的定义 二、图的基本概念和术语 2.1有向图 2.2无向图 2.3简单图 2.4多重图 2.5完全图 2.6子图 2.7连通、连通图和连通分量 2.8强连通图、强联通分量 2.9生成树&#xff0c;生成森林 2.10顶点的度、入度和出度 2.11边的权和网 2.12稠密图、稀疏图 2.1…...

【Prompt Engineering】2.迭代优化

一、环境配置 配置使用zhipuai API 的环境。安装 zhipuai 库&#xff0c;并设置 API_KEY。封装 zhipuai 接口的函数&#xff0c;参数为 Prompt&#xff0c;返回对应结果。 from zhipuai import ZhipuAI zhipu_client ZhipuAI(api_key"") # 一个封装 OpenAI 接口…...

每日十题八股-2024年12月16日

1.垃圾回收算法哪些阶段会stop the world? 2.minorGC、majorGC、fullGC的区别&#xff0c;什么场景触发full GC 3.垃圾回收器 CMS 和 G1的区别&#xff1f; 4.什么情况下使用CMS&#xff0c;什么情况使用G1? 5.G1回收器的特色是什么&#xff1f; 6.GC只会对堆进行GC吗&#x…...

使用 imageio 库轻松处理图像与视频

使用 imageio 库轻松处理图像与视频 imageio 是一个 Python 库&#xff0c;用于读取和写入多种图像和视频格式。它功能强大、易于使用&#xff0c;广泛应用于图像处理、视频编辑和数据可视化等领域。本篇文章将介绍 imageio 的基础功能、常见用法以及高级操作。 一、安装 imag…...

MR30分布式IO模块:驱动物流传输机高效升级

在日新月异的物流行业中&#xff0c;效率与智能化已成为推动企业转型升级的关键驱动力。随着物联网、大数据、云计算等技术的深度融合&#xff0c;传统物流传输机正逐步向智能化、自动化迈进。在这场技术革命中&#xff0c;明达技术MR30分布式IO模块以其独特的优势&#xff0c;…...

【开源免费】基于SpringBoot+Vue.JS在线竞拍系统(JAVA毕业设计)

本文项目编号 T 013 &#xff0c;文末自助获取源码 \color{red}{T013&#xff0c;文末自助获取源码} T013&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…...

Docker

文章目录 仓库容器核心组件网络模式挂载方式Docker常用指令Compose常用指令代码 仓库 国内镜像仓库地址 修改方法见&#xff1a; https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 科大镜像&#xff1a;https://docker.mirrors.ustc.edu.cn/网易&#xff1a;ht…...

上海艾一公司-运维工程师知识点备战

1.AD域控&#xff08;ActionDirectory活动目录&#xff09; ad域的作用&#xff1a;批量管理主机和用户&#xff08;所以数量要多用这个才合适&#xff09; 前置1&#xff1a;VM安装Windows镜像 2.IT资产管理 3.会议室管理...

程序员实用工具之推荐(Recommendations for Practical Tools for Programmers)

11款程序员实用工具&#xff0c;老少皆宜 优秀程序员之所以优秀的原因并不一定是他写代码的速度比所有人都快&#xff0c;但他解决事情的效率一定是比很多人都要高的&#xff0c;提升工作效率的方法并不需要我们十八般武艺样样精通&#xff0c;有时候使用好的工具就能帮助我们大…...

win服务器的架设、windows server 2012 R2 系统的下载与安装使用

文章目录 windows server 2012 R2 系统的下载与安装使用1 windows server 2012 的下载2 打开 VMware 虚拟机软件&#xff08;1&#xff09;新建虚拟机&#xff08;2&#xff09;设置虚拟机&#xff08;3&#xff09;打开虚拟机 windows server 2012&#xff08;4&#xff09;进…...

当服务器数据包丢失该怎样进行解决?

当企业面对服务器数据包丢失的情况&#xff0c;都有哪些解决策略呢&#xff1f; 首先对于数据丢失&#xff0c;最直接的方法就是尝试进行数据恢复&#xff0c;数据恢复过程通常包括使用数据恢复软件扫描丢失数据的磁盘驱动器&#xff0c;以此来尝试找回丢失的文件&#xff0c;在…...

go语言 爬虫 钉钉群机器人

第一步&#xff1a;钉钉新建一个群机器人 钉钉创建群机器人文档&#xff1a;https://open.dingtalk.com/document/orgapp/custom-robot-access 安全设置选择签名 签名设置文档&#xff1a;https://open.dingtalk.com/document/robots/customize-robot-security-settings 第二步…...

14篇--模板匹配

原理 模板匹配就是用模板图&#xff08;通常是一个小图&#xff09;在目标图像&#xff08;通常是一个比模板图大的图片&#xff09;中不断的滑动比较&#xff0c;通过某种比较方法来判断是否匹配成功。 匹配方法 1. 平方差匹配TM_SQDIFF 以模板图与目标图所对应的像素值使用…...

Cadence学习笔记 5 四路HDMI原理图绘制

基于Cadence 17.4&#xff0c;四层板4路HDMI电路 更多Cadence学习笔记&#xff1a;Cadence学习笔记 1 原理图库绘制Cadence学习笔记 2 PCB封装绘制Cadence学习笔记 3 MCU主控原理图绘制Cadence学习笔记 4 单片机原理图绘制 目录 5、四路HDMI原理图绘制 快捷键总结&#xff1a;…...

一文详解“分治—归并“在算法中的应用

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a; 优选算法专题 这里的归并与我们在数据结构中学习的归并排序是一样的&#xff0c;我们可以先来复习一下归并排序。用一道题来帮助我们回想起归…...

哪些视频媒体平台可给企业直播间做分发拉流转播宣传?提升流量数据!

【本篇由 言同数字媒体直播分发 原创】在如今信息爆炸的时代&#xff0c;直播已成为企业进行品牌传播、产品推广和与消费者互动的重要渠道。为了最大化直播效果&#xff0c;企业通常需要选择合适的视频平台进行直播分发和拉流宣传。以下是一些热门的视频平台&#xff0c;它们为…...

软硬件漏洞有哪些

关于网络软件安全漏洞与硬件安全漏洞&#xff0c;这是一个涉及到信息安全领域的重要问题。在当前信息化快速发展的背景下&#xff0c;无论是软件还是硬件的安全问题都可能成为安全隐患&#xff0c;因此了解这两方面的安全漏洞对于提升整体系统的安全性至关重要。 ### 网络软件…...

ElasticSearch系列:索引分片调整

一、前言 ElasticSearch版本&#xff1a;8.11.1 操作环境&#xff1a;机器数5&#xff0c;规格为16核32 GB 索引名称&#xff1a;test 索引大小&#xff1a;1.5G 索引分片&#xff1a;1主1副 测试环境将test索引调整为2主2副。计划采用如下两种方案&#xff1a; 方式耗时…...

KeyFormer:使用注意力分数压缩KV缓存

Keyformer: KV Cache Reduction through Key Tokens Selection for Efficient Generative Inference 202403&#xff0c;发表在Mlsys Introduction 优化KV cache的策略&#xff0c;主要是集中在系统级别的优化上&#xff0c;比如FlashAttention、PagedAttention&#xff0c;它…...

ElementPlus Table 表格实现可编辑单元格

通过基础的Table表格来实现单元格内容的可编辑 1.首先定位到需要编辑的列&#xff0c;替换el-table-column <el-table-column label"Editable Column" width"300"><template #default"{ row, column, $index }"><el-inputsize&qu…...

ASR-LLM-TTS 实时语音对话助手:语音识别、大模型对话、声音生成

参考:https://blog.csdn.net/weixin_42357472/article/details/137020794 asr:funasr-SenseVoiceSmall 离线 llm:deepseek 在线api tts:edge-tts 在线api import pyaudio import wave import threading import numpy as np import time from queue import Queue import web…...

怎样正确做 Web 应用的压力测试?

Web应用&#xff0c;通俗来讲就是一个网站&#xff0c;主要依托于浏览器来访问其功能。 那怎么正确做网站的压力测试呢&#xff1f; 提到压力测试&#xff0c;我们想到的是服务端压力测试&#xff0c;其实这是片面的&#xff0c;完整的压力测试包含服务端压力测试和前端压力测…...

什么是MyBatis?

MyBatis 是一个优秀的持久层框架&#xff0c;它消除了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的工作。MyBatis 使用简单的 XML 或注解用于配置和原始映射&#xff0c;将接口和 Java 的 POJOs&#xff08;Plain Old Java Objects&#xff0c;普通的 Java对象&#xf…...