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)
相关推荐
鹏大师运维14 小时前
统信UOS安装Subtitle Edit并使用Edge-TTS生成AI语音教程
linux·前端·人工智能·edge·麒麟·统信uos·ai语音
小赖同学啊14 小时前
基于MCP与主流AI技术架构 水利 发电 公园中的应用
人工智能·架构
morning_judger14 小时前
Agent开发系列(六)-安全护栏建设
人工智能·安全
2501_9127840814 小时前
后端开发实战:反向海淘多币种结算模块自研与SaaS复用对比
大数据·人工智能·taocarts·跨境saas
网络研究院14 小时前
黑客利用人工智能的5种方式(以及如何防御)
人工智能·黑客·攻击·恶意软件·钓鱼邮件
用户51914958484514 小时前
Wux Blog Editor 漏洞利用工具 (CVE-2024-9932)
人工智能·aigc
HIT_Weston14 小时前
107、【Agent】【OpenCode】todowrite 工具提示词(示例)(一)
人工智能·agent·opencode
团象科技14 小时前
走访近百支出海技术团队后的海外云计算资源选型实操观察
大数据·人工智能·算法
yyuuuzz14 小时前
谷歌云基础服务的入门认知
linux·运维·服务器·数据库·人工智能·github
小锋java123414 小时前
【技术专题】LangChain4j 开发Java Agent智能体 - 嵌入模型与向量数据库
java·人工智能