torch.stack 张量维度的变化

torch.stack 是 PyTorch 中用于将一系列张量沿一个新的维度堆叠的函数。与 torch.cat 不同的是,torch.stack会在指定的维度上增加一个新的维度,而不是将张量直接拼接。

基本用法

语法:

复制代码
torch.stack(tensors, dim=0)
  • tensors: 一个张量列表,包含多个形状相同的张量(shape 必须相同)。
  • dim: 新增维度的位置,默认是 0

举例说明

假设有三个形状为 (2, 3) 的张量:

复制代码
import torch

a = torch.tensor([[1, 2, 3], [4, 5, 6]])
b = torch.tensor([[7, 8, 9], [10, 11, 12]])
c = torch.tensor([[13, 14, 15], [16, 17, 18]])

沿 dim=0 堆叠

复制代码
stacked = torch.stack([a, b, c], dim=0)
print(stacked.shape)  # torch.Size([3, 2, 3])
  • 在维度 0 上增加一个新的维度,原始的 (2, 3) 形状变成 (3, 2, 3)
  • stacked 的第 0 维度有 3 个元素,对应原来的 a, b, c 张量。

沿 dim=1 堆叠

复制代码
stacked = torch.stack([a, b, c], dim=1)
print(stacked.shape)  # torch.Size([2, 3, 3])
  • 新的维度插入到原第 1 维的位置。
  • stacked 的第 1 维度有 3 个元素,对应原来的 a, b, c 张量。

沿 dim=2 堆叠

复制代码
stacked = torch.stack([a, b, c], dim=2)
print(stacked.shape)  # torch.Size([2, 3, 3])
  • 新的维度插入到原第 2 维的位置,形状变为 (2, 3, 3)

torch.stack 的形状变化总结

假设堆叠前的每个张量形状是 (A, B, C),在 dim=0dim=1dim=2 堆叠后的形状分别为:

  • dim=0: (N, A, B, C)
  • dim=1: (A, N, B, C)
  • dim=2: (A, B, N, C)

其中 N 是堆叠的张量数量。

和torch.cat函数的区别:

cat:在指定维度拼接多个张量。不增加维度。

复制代码
c1 = torch.tensor([[1, 2], [3, 4]])
c2 = torch.tensor([[5, 6], [7, 8]])
c_cat = torch.cat([c1, c2], dim=0)  # shape (4, 2)
相关推荐
蔡俊锋10 分钟前
AI提示词零基础入门:从“无效提问”到“精准输出”,核心方法论全拆解
人工智能·ai提示词·ai工程·ai沟通
枫叶林FYL13 分钟前
第10章 符号推理与神经符号AI
pytorch·python·深度学习
LaughingZhu16 分钟前
移动端 AI 的价值重估:设备端智能的拐点
大数据·人工智能·经验分享·搜索引擎·语音识别
杜子不疼.18 分钟前
Java 智能体学习避坑指南:3 个常见误区,新手千万别踩,高效少走弯路
java·开发语言·人工智能·学习
普马萨特23 分钟前
基站 / WiFi 粗略位置对 A-GNSS 的影响
网络·人工智能·算法
孤岛站岗28 分钟前
【AI Agent实战手册】AG05:MCP vs A2A——两大协议谁会成为行业标准?
人工智能
ai生成式引擎优化技术28 分钟前
双环自适应AI系统正式(DLAA):面向决策智能的双重反馈闭环生成式AI系统架构构思
人工智能
拥有一颗学徒的心42 分钟前
国产大模型杀入决赛圈:GLM5.1 vs Qwen3.6-Plus vs Claude Opus 4.6,谁才是编程之王?
人工智能
nimadan121 小时前
剧本杀app2025推荐,多类型剧本体验与社交互动优势
人工智能·python
m0_571186601 小时前
第四十周周报
人工智能