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)
相关推荐
绿算技术几秒前
大模型本地化的经济账:DeepSeek V4 Flash 部署实测
人工智能·科技·算法·spark
阿尔法工场研究院3 分钟前
小米向下扎根,中国科技向上
人工智能·科技
智圣新创014 分钟前
存量数字化校园升级破局:从基础数据集成到校务服务全域提效的通用落地路径
大数据·人工智能·物联网
AI的探索之旅5 分钟前
97 个 OpenCV 实例(十二):仪表自动读数,从图像处理到落地项目
人工智能·opencv·计算机视觉·ai
奈斯先生Vector8 分钟前
从“能调用”到“可替换”:Coze 多模型 API 编排层设计指南
linux·运维·人工智能·ubuntu·平面·ios
aneasystone本尊11 分钟前
学习大模型推理的嵌入与位置编码
人工智能
FII工业富联科技服务13 分钟前
GW级AI数据中心怎么建?Omniverse、CFD、液冷与BMS技术路径拆解
服务器·人工智能·算法·能源·制造
新知图书15 分钟前
9.2 客户支持聊天机器人-项目架构设计
人工智能·agent·ai agent·智能体
HAHAXX820 分钟前
AI 编程助手 + RPA 二次开发:基于 Prompt 工程对接大模型接口完整教程
人工智能·prompt·rpa
柳絮飞祭奠21 分钟前
03-Dify知识库搭建实战专利文档TXT+Excel
人工智能·pytorch·自然语言处理·集成学习