You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

torch.stack(dim=1)与torch.hstack对一维张量操作的差异疑问

为什么torch.stack与torch.hstack对一维张量水平堆叠结果不同?

先明确实验基础:
定义一维张量t1:

t1 = torch.arange(1.,10.)
# 输出:(tensor([1., 2., 3., 4., 5., 6., 7., 8., 9.]), torch.Size([9]))

1. torch.stack的本质:新增维度后堆叠

torch.stack([t1,t1,t1], dim=1)的核心逻辑是先给每个输入张量新增一个维度,再在指定维度上拼接:

  • 原t1是1维(shape [9]),stack操作会先把每个t1扩展为2维(shape [9,1])
  • 然后在dim=1这个新增维度上拼接三个[9,1]的张量,最终得到shape [9,3]的2维张量
  • 表现为原张量的每个元素对应一行,三个t1的相同位置元素组成列:
tensor([[1., 1., 1.],
        [2., 2., 2.],
        [3., 3., 3.],
        [4., 4., 4.],
        [5., 5., 5.],
        [6., 6., 6.],
        [7., 7., 7.],
        [8., 8., 8.],
        [9., 9., 9.]])

2. torch.hstack的本质:在已有维度上直接拼接

torch.hstack([t1,t1,t1])的核心是在水平方向(最后一个维度)直接拼接已有维度,不会新增维度:

  • 对于1维张量,水平拼接就是把三个长度为9的张量首尾相接,最终得到长度为9*3=27的1维张量
  • 表现为三个t1的元素依次连续排列:
tensor([1., 2., 3., 4., 5., 6., 7., 8., 9., 1., 2., 3., 4., 5., 6., 7., 8., 9.,
        1., 2., 3., 4., 5., 6., 7., 8., 9.])

核心区别总结

  • torch.stack:要求所有输入张量形状完全相同,操作后增加一个维度,把多个同形状张量组合成更高维结构
  • torch.hstack:要求除拼接维度外其他维度形状一致,操作后维度数不变,仅对应维度的长度增加

内容的提问来源于stack exchange,提问作者Hemanthsai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 00:27:42