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

PyTorch中如何将[1,20]张量重复堆叠得到形状为[2,20]的张量?

PyTorch实现张量堆叠扩展的内置方法

你需要的功能PyTorch有多个内置API可以直接实现,不需要自己写循环,以下是最常用的三种方案:

方案1:torch.repeat()(最通用,适合需要修改扩展后张量的场景)

repeat会真实复制张量数据,返回独立的连续张量,修改扩展后的结果不会影响原始张量:

import torch

# 初始形状为[1, 20]的位置序列
pos = torch.arange(20).unsqueeze(0)
# 沿第0维复制2次,第1维保持不变,输出形状[2, 20]
expanded_pos = pos.repeat(2, 1)

如果需要和输入序列的batch size自动对齐,可以直接用输入的形状参数,不用写死数值:

input_seq = torch.randn(2, 20) # 你的输入序列
expanded_pos = pos.repeat(input_seq.shape[0], 1)

方案2:torch.expand()(只读场景更高效)

如果扩展后的张量不需要修改元素值,用expand更节省内存,它只会创建张量视图,不会真实复制数据:

# -1表示对应维度保持原始大小,无需手动指定长度
expanded_pos = pos.expand(input_seq.shape[0], -1)

注意:修改expand生成的张量会同时修改所有复制出来的切片,且返回的张量默认不是连续内存排布,如果后续需要调用要求连续内存的API(比如view),需要手动调用.contiguous()。

方案3:torch.tile()(对齐Numpy接口)

PyTorch 1.8及以上版本支持该API,功能和repeat基本一致,参数传入元组即可:

expanded_pos = pos.tile((input_seq.shape[0], 1))

三种方案最终输出的结果完全符合你要求的格式,你可以根据自己的使用场景选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 14:24:03