PyTorch基础(18)-- torch.stack()方法

news2024/10/3 0:32:18

一、方法详解

首先,看一下stack的直观解释,动词可以简单理解为:把……放成一堆、把……放成一摞。
在这里插入图片描述
有了对stack方法的直观感受,接下来,我们正式解析torch.stack方法。

PyTorch torch.stack() method joins (concatenates) a sequence of tensors (two or more tensors) along a new dimension. It inserts new dimension and concatenates the tensors along that dimension. This method joins the tensors with the same dimensions and shape. We could also use torch.cat() to join tensors But here we discuss the torch.stack() method.

torch.stack方法用于沿着一个新的维度 join(也可称为cat)一系列的张量(可以是2个张量或者是更多),它会插入一个新的维度,并让张量按照这个新的维度进行张量的cat操作。值得注意的是:张量序列中的张量必须要有相同的shape和dimension。

在这里插入图片描述

Parameters
tensors:张量序列,也就是要进行stack操作的对象,可以有很多个张量。
dim:按照dim的方式对这些张量进行stack操作,也就是你要按照哪种堆叠方式对张量进行堆叠。dim的取值范围为闭区间[0,输入Tensor的维数]
return
堆叠后的张量

只通过理论对方法进行解释说明是不够直观的,下面会通过大量的示例对torch.stack方法进行解析!

二、案例解析

2.1 案例1:2个一维tensor进行stack操作

  • 程序
 x = t.tensor([1,2,3,4])
 y = t.tensor([5,6,7,8])
 
 print(x.shape)
 print(y.shape)
 
 z1 = t.stack((x,y), dim=0)
 print(z1)
 print(z1.shape)
 
 z2 = t.stack((x,y), dim=1)
 print(z2)
 print(z2.shape)
  • 运行结果
torch.Size([4])
torch.Size([4])

tensor([[1, 2, 3, 4],
        [5, 6, 7, 8]])
torch.Size([2, 4])

tensor([[1, 5],
        [2, 6],
        [3, 7],
        [4, 8]])
torch.Size([4, 2])
  • 图解
    在这里插入图片描述

2.2 案例2:2个二维tensor进行stack操作

  • 程序
 x = t.tensor([[1,2,3],[4,5,6]])
 y = t.tensor([[7,8,9],[10,11,12]])
 print(x.shape)
 print(y.shape)

 z1 = t.stack((x,y), dim=0)
 print(z1)
 print(z1.shape)

 z2 = t.stack((x,y), dim=1)
 print(z2)
 print(z2.shape)

 z3 = t.stack((x,y), dim=2)
 print(z3)
 print(z3.shape)
  • 运行结果
torch.Size([2, 3])
torch.Size([2, 3])

tensor([[[ 1,  2,  3],
         [ 4,  5,  6]],

        [[ 7,  8,  9],
         [10, 11, 12]]])
torch.Size([2, 2, 3])

tensor([[[ 1,  2,  3],
         [ 7,  8,  9]],

        [[ 4,  5,  6],
         [10, 11, 12]]])
torch.Size([2, 2, 3])

tensor([[[ 1,  7],
         [ 2,  8],
         [ 3,  9]],

        [[ 4, 10],
         [ 5, 11],
         [ 6, 12]]])
torch.Size([2, 3, 2])
  • 图解
    在这里插入图片描述

2.3 案例3:多个二维tensor进行stack操作

  • 程序
x = torch.tensor([[1,2,3],[4,5,6]])
y = torch.tensor([[7,8,9],[10,11,12]])
z = torch.tensor([[13,14,15],[16,17,18]])
print(x.shape)
print(y.shape)
print(z.shape)

r1 = torch.stack((x,y,z),dim=0)
print(r1)
print(r1.shape)

r2 = torch.stack((x,y,z),dim=1)
print(r2)
print(r2.shape)

r3 = torch.stack((x,y,z),dim=2)
print(r3)
print(r3.shape)
  • 运行结果
torch.Size([2, 3])
torch.Size([2, 3])
torch.Size([2, 3])

tensor([[[ 1,  2,  3],
         [ 4,  5,  6]],

        [[ 7,  8,  9],
         [10, 11, 12]],

        [[13, 14, 15],
         [16, 17, 18]]])
torch.Size([3, 2, 3])

tensor([[[ 1,  2,  3],
         [ 7,  8,  9],
         [13, 14, 15]],

        [[ 4,  5,  6],
         [10, 11, 12],
         [16, 17, 18]]])
torch.Size([2, 3, 3])

tensor([[[ 1,  7, 13],
         [ 2,  8, 14],
         [ 3,  9, 15]],

        [[ 4, 10, 16],
         [ 5, 11, 17],
         [ 6, 12, 18]]])
torch.Size([2, 3, 3])
  • 图解

2.4 案例4:2个三维tensor进行stack操作

  • 程序
x = torch.tensor([[[1,2,3],[4,5,6]],
                  [[2,3,4],[5,6,7]]])
y = torch.tensor([[[7,8,9],[10,11,12]],
                  [[8,9,10],[11,12,13]]])
print(x.shape)
print(y.shape)
z1 = torch.stack((x,y),dim=0)
print(z1)
print(z1.shape)
z2 = torch.stack((x,y),dim=1)
print(z2)
print(z2.shape)
z3 = torch.stack((x,y),dim=2)
print(z3)
print(z3.shape)
z4 = torch.stack((x,y),dim=3)
print(z4)
print(z4.shape)
  • 运行结果
torch.Size([2, 2, 3])
torch.Size([2, 2, 3])

tensor([[[[ 1,  2,  3],
          [ 4,  5,  6]],

         [[ 2,  3,  4],
          [ 5,  6,  7]]],


        [[[ 7,  8,  9],
          [10, 11, 12]],

         [[ 8,  9, 10],
          [11, 12, 13]]]])
torch.Size([2, 2, 2, 3])

tensor([[[[ 1,  2,  3],
          [ 4,  5,  6]],

         [[ 7,  8,  9],
          [10, 11, 12]]],


        [[[ 2,  3,  4],
          [ 5,  6,  7]],

         [[ 8,  9, 10],
          [11, 12, 13]]]])
torch.Size([2, 2, 2, 3])

tensor([[[[ 1,  2,  3],
          [ 7,  8,  9]],

         [[ 4,  5,  6],
          [10, 11, 12]]],


        [[[ 2,  3,  4],
          [ 8,  9, 10]],

         [[ 5,  6,  7],
          [11, 12, 13]]]])
torch.Size([2, 2, 2, 3])

tensor([[[[ 1,  7],
          [ 2,  8],
          [ 3,  9]],

         [[ 4, 10],
          [ 5, 11],
          [ 6, 12]]],


        [[[ 2,  8],
          [ 3,  9],
          [ 4, 10]],

         [[ 5, 11],
          [ 6, 12],
          [ 7, 13]]]])
torch.Size([2, 2, 3, 2])
  • 图解

参考文献

[1]https://blog.csdn.net/flyingluohaipeng/article/details/125034358
[2]https://www.geeksforgeeks.org/python-pytorch-stack-method/
[3]https://www.bing.com/search?q=torch.stack&form=ANNTH1&refig=653766bda2d540398dfb83d482cd33cd

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

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

相关文章

cookie过大导致request 400 错误研究

问:get请求太长报400的错误,如何解决?生成系统中经常偶现此问题 问:get请求URL的长度是谁限制的? 问:每一个cookie的value的大小还是同域下cookie的个数做的限制? 现象:出现 400 Ba…

【Android知识笔记】插件化专题(一)

占位式插件化方案 宿主启动插件 Activity 的流程 实现思路: 创建一个 DexClassLoader 类加载其用于加载插件包apk中的 Activity 类 反射调用 AssetManager 的 addAssetPath() 将插件包的路径添加,然后通过该AssetManager的实例构造Resource的实例用以加载插件中的布局 启动…

一个信号间相互干扰问题的发现及解决方法

问题描述:MAX3232串口通讯芯片的输出引脚上存在干扰电平,通过示波器可以看到干扰电平,PC端的串口程序表现为接收到乱码。如下图,环回测试中发了一串字符数据ATCIPSEND后,除了收到环回的ATCIPSEND字符外,还有…

【vue2高德地图api】高德地图forEach批量添加marker点标记,点击获取item对象『全网最详细』【翻遍csdn总结】

系列文章目录 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 系列文章目录前言一、展示地图二、getList获取列表数据三、写入marker标记在页面中1、marker的官方文档2、setMarks方法3 点击事件4 学习心得 总结 前…

Qtcreator 编译C++代码并打包成APK

1:首先需要下载正确的SDK,NDK工具 我们可以使用sdkmanager工具来进行确认,我们当前已经安装了哪些模块 2:撰写自己的CMakeLists.txt 或者 QtCreator可以识别的.pro 文件 使用QtCreator 可以生产默认的.pro 文件,其中的…

ChatGPT 助力英文论文翻译和润色

文章目录 一、前言二、主要内容1. 中英互译2. 中文润色3. 英文润色 三、总结 🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 一、前言 随着全球化的推进,跨文化交流变得越来越重要。在学术领域,英文论文的质量对于研究成果的传…

Chapter1:C++概述

此专栏为移动机器人知识体系的 C {\rm C} C基础,基于《深入浅出 C {\rm C} C》(马晓锐)的笔记, g i t e e {\rm gitee} gitee链接: 移动机器人知识体系. 1.C概述 1.1 C概述 计算机系统分为硬件系统和软件系统。 硬件系统:指组成计算机的电子…

C++:二叉搜索树的原理和模拟实现

文章目录 二叉搜索树二叉搜索树的基本实现原理 二叉搜索树的实现非递归版本的实现递归版本的实现 二叉搜索树 二叉搜索树也叫做二叉排序树,可以是空树,也可以是满足一些要求的二叉树 若它的左子树不为空,则左子树上所有节点的值都小于根节点…

关于C2447 “{”: 缺少函数标题(是否是老式的形式表?)

以下两幅图,实际上并没有任何错误。 OR 我从vscode上把代码移植过来,实际并无任何错误。但是因为这个注释,一直在报错,我把所有注释都删了,程序就自然运行了。所以问题出在哪呢?希望大佬解答。

统信UOS技术开放日:四大领域全面接入AI大模型能力

1024是程序员的节日,10月24日,统信举办2023统信UOS技术开放日暨deepin Meetup北京站活动,发布与大模型同行的UOS AI、浏览器AI助手、邮箱AI助手、自然语言全局搜索、畅写在线等多项最新AI技术与产品应用。 统信软件高级副总经理、CTO、深度社…

C语言知识回顾

链接:https://pan.baidu.com/s/1CiB1Ydm4LTV6hZE8wx0VFw?pwdna4z 提取码:na4z --来自百度网盘超级会员V6的分享

【分布式技术专题】「分布式技术架构」MySQL数据同步到Elasticsearch之N种方案解析,实现高效数据同步

MySQL数据同步到Elasticsearch之N种方案解析,实现高效数据同步 前提介绍MySQL和ElasticSearch的同步双写优点缺点针对于缺点补充优化方案 MySQL和ElasticSearch的异步双写优点缺点 定时延时写入ElasticSearch数据库机制优点缺点 开源和成熟的数据迁移工具选型Logsta…

arcgis js api FeatureLayer加载时返回数据带*问题

接着这一问题衍生出来的问题 arcgis的MapServer服务查询出来的结果geometry坐标点带*的问题-CSDN博客 个人感觉像是server版本的问题,具体不清楚,pg数据库里面的shape点集合坐标点的精度是8,但是server服务查出来的默认都十几位。所以存在一…

使用达梦数据库的总结

–修改当前会话所在模式: set schema 模式名;–创建表空间、用户名并为用户指定表空间,并为用户授权 create tablespace "RSGL_BZK" datafile REGL_BZK.DBF size 7488 autoextend on next 128 maxsize 33554431 CACHE NORMAL; create user …

制作macOS Ventura U盘启动盘教程

macOS 14更新一段时间了,发现某些应用不适配想要无损降级,如何进行macOS的降级呢,除了备份好的时间机器备份,还需要一个可以引导的macOS U盘安装器,如何制作macOS 13 Ventura 系统启动U盘呢,小编带来对新手…

webGL编程指南 第四章 旋转+平移.TanslatedRotatdTriangle

我会持续更新关于wegl的编程指南中的代码。 当前的代码不会使用书中的缩写,每一步都是会展开写。希望能给后来学习的一些帮助 git代码地址 :git 本篇文章将把旋转和平位移结合起来,因为矩阵的不存在交换法则 文章中设计的矩阵地址在这里​…

苹果cms模板MXone V10.6魔改版网站源码短视大气海报样式

安装模板教程说明: 1、将模板压缩包上传到苹果cms程序/template下解压 2、网站板选择mxone 模板目录填写html 3、网站模板选择好之后一定要先访问前台,然后再进入后台设置 4、主题后台地址: 苹果cms后台点击,自定义菜单配置 …

6.6 Elasticsearch(六)京淘项目改造

文章目录 1.项目准备2.基础配置2.1 添加pom.xml依赖2.2 yml配置es服务器地址列表 3.具体实现3.1 item实体类封装3.2 添加接口3.3 SearchController 4.search.jsp界面4.1 搜索内容展示4.2 高亮内容样式设置4.3 搜索框内容回填4.4 添加上下页按钮 1.项目准备 我们切换回到此前的…

【C++】继承 ⑨ ( 继承中成员变量同名的处理方案 )

文章目录 一、继承中成员变量同名的处理方案1、继承中成员变量同名的场景说明2、使用域作用符区分同名成员变量 二、代码示例 - 继承中成员变量同名的处理方案 一、继承中成员变量同名的处理方案 1、继承中成员变量同名的场景说明 子类 继承 父类 的 成员 , 如果 子类 中定义了…

[数据分析与可视化] 基于Python绘制简单动图

动画是一种高效的可视化工具,能够提升用户的吸引力和视觉体验,有助于以富有意义的方式呈现数据可视化。本文的主要介绍在Python中两种简单制作动图的方法。其中一种方法是使用matplotlib的Animations模块绘制动图,另一种方法是基于Pillow生成…