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

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

一、方法详解

首先,看一下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

相关文章:

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

一、方法详解 首先,看一下stack的直观解释,动词可以简单理解为:把……放成一堆、把……放成一摞。 有了对stack方法的直观感受,接下来,我们正式解析torch.stack方法。 PyTorch torch.stack() method joins (concaten…...

从lc560“和为 K 的子数组“带你认识“前缀和+哈希表“的解题思路

1 前缀和哈希表解题的几道题目:建议集中练习 560. 和为 K 的子数组:https://leetcode.cn/problems/subarray-sum-equals-k/ 1248. 统计「优美子数组」: https://leetcode.cn/problems/count-number-of-nice-subarrays/ 1249. 和可被 K 整除的子数组(利用…...

c:变参函数:汇编解析;va_list;marco 宏:__VA_ARGS__

文章目录 参考gcc 内部的宏定义代码汇编调用在 SEI CERT C Coding Standard 这个标准里示例实例宏里的使用 参考 https://git.sr.ht/~gregkh/presentation-security/blob/3547183843399d693c35b502cf4a313e256d0dd8/security-stuff.pdf gcc 内部的宏定义 宏定义:…...

eclipse安装教程(2021版)

第一步:下载JDK (下载地址) Java SE - Downloads 第二步 根据自己电脑的系统,选择相应的版本x64代表64位,x86代表32位。点击相应的JDK进行下载 点击之后会出现一个对话框 同意之后下载。(记住下载到哪,打…...

计算机网络重点概念整理-第二章 物理层【期末复习|考研复习】

第二章 物理层 【期末复习|考研复习】 计算机网络系列文章传送门: 第一章 计算机网络概述 第二章 物理层 第三章 数据链路层 第四章 网络层 第五章 传输层 第六章 应用层 第七章 网络安全 计算机网络整理-简称&缩写 文章目录 第二章 物理层 【期末复习|考研复习…...

【计算机网络】从输入URL到页面都显示经历了什么??

文字总结 ① DNS 解析:当用户输入一个网址并按下回车键的时候,浏览器获得一个域名,而在实际通信过程中,我们需要的是一个 IP 地址,因此我们需要先把域名转换成相应 IP 地址。浏览器会首先从缓存中找是否存在域名&…...

[C++]——带你学习类和对象

类和对象——上 目录:一、面向过程和面向对象二、类的概念三、类的访问限定符和封装3.1 访问限定符3.2 封装 四、类的作用域五、类的实例化六、类的对象大小的计算七、类成员函数this指针7.1 this指针的引用7.2 this 指针的特性 目录: 类和对象是很重要…...

Docker多平台、跨平台编译打包

大多数带有Docker官方标识的镜像都提供了多架构支持。如:busybox镜像支持amd64, arm32v5, arm32v6, arm32v7, arm64v8, i386, ppc64le, and s390x。当你在amd64设备上运行容器时,会拉取amd64镜像。 当你需要构建多平台镜像时,可以用 --platf…...

LLM系列 | 22 : Code Llama实战(下篇):本地部署、量化及GPT-4对比

引言 模型简介 依赖安装 模型inference 代码补全 4-bit版模型 代码填充 指令编码 Code Llama vs ChatGPT vs GPT4 小结 引言 青山隐隐水迢迢,秋尽江南草未凋。 小伙伴们好,我是《小窗幽记机器学习》的小编:卖热干面的小女孩。紧接…...

Nginx的进程结构实例演示

可以参考《Ubuntu 20.04使用源码安装nginx 1.14.0》安装nginx 1.14.0。 nginx.conf文件中worker_processes 2;这条语句表明启动两个worker进程。 sudo /nginx/sbin/nginx -c /nginx/conf/nginx.conf开启nginx。 ps -ef | grep nginx看一下进程情况。 sudo /nginx/sbin/ng…...

【Nginx36】Nginx学习:SSI静态文件服务器端包含模块

Nginx学习:SSI静态文件服务器端包含模块 这个模块让我想到了 2009 年刚刚工作的时候。最早我是做 .NET 的,而第一家公司其实是从 ASP 向 ASP.NET 转型中,因此,还是有不少的 ASP 做的页面。在那个时候,就用到了 SSI 。 …...

StripedFly恶意软件框架感染了100万台Windows和Linux主机

导语 近日,一款名为StripedFly的恶意软件框架在网络安全研究人员的监视之外悄然感染了超过100万台Windows和Linux系统。这款跨平台的恶意软件平台在过去的五年中一直未被察觉。在去年,卡巴斯基实验室发现了这个恶意框架的真实本质,并发现其活…...

蓝桥杯每日一题2023.10.25

乘积尾零 - 蓝桥云课 (lanqiao.cn) 题目描述 题目分析 由于需要相乘的数很多&#xff0c;所以我们不能直接进行暴力模拟&#xff0c;我们知道10 2 * 5&#xff0c; 所以我们只需要找出这个数2和5的个数&#xff0c;其中2和5个数小的那个则为末尾0出现的个数 #include<bi…...

【C++】详解map和set基本接口及使用

文章目录 一、关联式容器与键值对1.1关联式容器&#xff08;之前学的都是序列容器&#xff09;1.2键值对pairmake_pair函数&#xff08;map在插入的时候会很方便&#xff09; 1.3树形结构的关联式容器 二、set2.1set的基本介绍2.1默认构造、迭代器区间构造、拷贝构造&#xff0…...

如何学习 Linux 内核内存管理

Linux内核内存管理部分是Linux内核中第二复杂的部分&#xff0c;但也非常有趣。学习它的最佳方法就是阅读代码。但在不了解术语和当前 mm 部分到底发生了什么的情况下&#xff0c;显然不能随意开始阅读代码。因此&#xff0c;我想这样开始学习比较好&#xff1a; 了解当前的 LS…...

【计算机网络】(谢希仁第八版)第一章课后习题答案

1.计算机网络可以向用户提供哪些服务&#xff1f; 答&#xff1a;例如音频&#xff0c;视频&#xff0c;游戏等&#xff0c;但本质是提供连通性和共享这两个功能。 连通性&#xff1a;计算机网络使上网用户之间可以交换信息&#xff0c;好像这些用户的计算机都可以彼此直接连…...

Operator开发之operator-sdk入门

1 operator-sdk 除了kubebuilder&#xff0c;operator-sdk是另一个常用的用于开发Operator的框架&#xff0c;不过operator-sdk还是基于kubebuilder&#xff0c;因此&#xff0c;通常还是建议使用kubebuilder开发Operator。 2 环境准备 跟kubebuilder类似&#xff0c;需要安…...

RabbitMQ生产者的可靠性

目录 MQ使用时会出现的问题 生产者的可靠性 1、生产者重连 2、生产者确认 3、数据持久化 交换机持久化 队列持久化 消息持久化 LazyQueue懒加载 MQ使用时会出现的问题 发送消息时丢失&#xff1a; 生产者发送消息时连接MQ失败生产者发送消息到达MQ后未找到Exchange生…...

集群节点批量执行 shell 命令

1、SSH 工具本身支持多窗口 比如 MobaXterm&#xff1a; 2、编写脚本通过 ssh 在多台机器批量执行shell命令 创建 ssh_hosts 配置文件&#xff0c;定义需要批量执行的节点&#xff08;必须能够通过 ssh 免密登录&#xff0c;且存在同名用户&#xff09; vim ssh_hostsbig…...

fl studio21.2水果软件怎么设置中文?

FL Studio编曲软件真的是个神器&#xff0c;不过一开始打开看到全是英文&#xff0c;有点头大&#xff0c;对吧&#xff1f;其实切换成中文版超级简单&#xff0c;只需要几个步骤就搞定啦&#xff01;我自己也是用中文版的&#xff0c;觉得用起来更得心应手&#xff0c;效率也提…...

OpenClaw定时任务:千问3.5-9B每日早报自动推送

OpenClaw定时任务&#xff1a;千问3.5-9B每日早报自动推送 1. 为什么需要自动化早报推送 每天早上打开电脑第一件事&#xff0c;就是手动收集行业新闻、技术动态和日程提醒&#xff0c;再整理成早报发到团队群。这种重复劳动持续三个月后&#xff0c;我开始思考&#xff1a;能…...

CentOS 7.9 搭建 NTP 服务器

1、环境准备 1.1、CentOS 7.9系统 1.2、更换YUM源为本地或外网源 1.3、更换系统IP地址为静态地址 2、YUM 安装 NTP yum -y install ntp 3、配置NTP服务器 3.1、编辑 /etc/ntp.conf vi /etc/ntp.conf 3.2、如果你想同步外部 NTP 服务器&#xff0c;注释这四条内容 3.3、在下…...

全栈开发者工具链:OpenClaw+Qwen3.5-9B-AWQ-4bit辅助前端调试

全栈开发者工具链&#xff1a;OpenClawQwen3.5-9B-AWQ-4bit辅助前端调试 1. 为什么需要AI辅助前端调试 作为全栈开发者&#xff0c;我经常陷入这样的困境&#xff1a;当页面渲染出现异常时&#xff0c;需要在控制台日志、网络请求和DOM树之间反复切换排查。传统调试流程至少包…...

Simulink仿真避坑指南:三相异步电机调压调速,你的转速波形为什么震荡不稳?

Simulink三相异步电机调压调速实战&#xff1a;从波形异常到稳定输出的深度调优 当你在Simulink中搭建完三相异步电机调压调速模型&#xff0c;满心期待地点击"运行"按钮&#xff0c;却发现转速波形像过山车一样上下震荡——这种挫败感我深有体会。作为一名经历过无数…...

SecGPT-14B API保护:防止OpenClaw任务过度消耗模型资源

SecGPT-14B API保护&#xff1a;防止OpenClaw任务过度消耗模型资源 1. 为什么需要API保护机制 上周我在本地部署了SecGPT-14B模型&#xff0c;并尝试通过OpenClaw实现自动化安全报告生成。凌晨3点突然收到服务器告警——模型服务因资源耗尽崩溃了。检查日志发现&#xff0c;O…...

Lansium-Arduino:面向物联网终端的轻量级MQTT通信库

1. 项目概述 Lansium-Arduino 是一个面向嵌入式物联网终端的轻量级通信库&#xff0c;专为 Arduino 生态&#xff08;含 ESP32、ESP8266、Arduino Uno Ethernet/WiFi 扩展板等平台&#xff09;设计&#xff0c;用于实现设备与 Lansium Server 的可靠双向连接。其核心通信协议…...

Python 中的数据结构与算法:从基础到应用

Python 中的数据结构与算法&#xff1a;从基础到应用 1. 背景介绍 数据结构与算法是计算机科学的核心基础&#xff0c;它们决定了程序的效率和性能。在 Python 中&#xff0c;掌握常用的数据结构和算法不仅可以提高代码质量&#xff0c;还能解决复杂问题。本文将深入探讨 Pytho…...

计算机毕业设计:Python二手车市场数据分析及价格预测平台 Django框架 可视化 线性回归 数据分析 机器学习 深度学习 AI 大模型(建议收藏)✅

博主介绍&#xff1a;✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业项目实战6年之久&#xff0c;选择我们就是选择放心、选择安心毕业✌ > &#x1f345;想要获取完整文章或者源码&#xff0c;或者代做&#xff0c;拉到文章底部即可与…...

Claude Code 进阶攻略:搞定内置 /loop,用大白话玩转 Cron,一行搞定自动化任务

每天免费领 1亿 Token&#xff0c;白嫖DeepSeek、GLM、MiniMax、Kimi等大模型&#xff01; 本文写给&#xff1a;天天跟 Claude Code 打交道的程序员们&#xff0c;教你把那些烦人的监控活儿从“肉眼盯着”变成“系统自动报”。 等代码构建的时候&#xff0c;你通常在干嘛&…...

POJ1673——探索三角形垂心的几何奥秘与算法实现

1. 三角形垂心的几何本质 第一次接触POJ1673这道题时&#xff0c;我被题目中"垂心"这个概念卡住了。后来才发现&#xff0c;垂心其实就是三角形三个高线的交点。什么是高线&#xff1f;就是从三角形一个顶点向对边作垂线&#xff0c;这条垂线就是高线。有趣的是&…...