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

如何为张量在双维度填充零?PyTorch实现遇阻求助

解决张量特定位置零填充的问题

你的问题核心是要在原始张量的特定位置插入零,而stack/cat失败是因为你没有让待拼接的张量保持一致的形状和维度。下面给你两种简单可行的实现方法:

方法一:直接构造目标张量并赋值(最直观)

这种思路是先创建一个符合目标长度的全零张量,然后把原始张量的元素放到对应的位置上,非常适合这种位置规律明确的场景。

import torch

# 修正初始张量(匹配你说的1-8初始元素)
t = torch.arange(1, 9).float()  # tensor([1., 2., 3., 4., 5., 6., 7., 8.])

# 构造目标全零张量,长度和你想要的结果一致(24个元素)
target = torch.zeros(24)

# 定义原始元素在目标张量中的位置索引
# 规律:前5个零,之后每两个元素占4位(元素+两个零),最后一组元素后接5个零
indices = torch.tensor([5,6,9,10,13,14,17,18])

# 将原始元素赋值到目标位置
target[indices] = t

print(target)
# 输出:tensor([0., 0., 0., 0., 0., 1., 2., 0., 0., 3., 4., 0., 0., 5., 6., 0., 0., 7., 8., 0., 0., 0., 0., 0.])

方法二:通过拼接小张量实现

如果你更倾向于用拼接的方式,可以把原始张量拆分成小块,然后和零张量交替拼接,最后再加上前后的零:

import torch

t = torch.arange(1, 9).float().reshape(4, 2)  # 拆成4个(2,)的块:[[1,2],[3,4],[5,6],[7,8]]

# 定义每个块后面要加的零张量(两个零)
zero_pad = torch.zeros(2)

# 对前3个块,每个块拼接两个零;最后一个块直接保留
blocks_with_pad = [torch.cat([block, zero_pad]) for block in t[:3]] + [t[3]]

# 把所有块拼接起来,再前后分别加上5个零
middle_part = torch.cat(blocks_with_pad)
target = torch.cat([torch.zeros(5), middle_part, torch.zeros(5)])

print(target)
# 输出和方法一完全一致

为什么你的stack/cat失败?

  • torch.stack是在新的维度上拼接张量,要求所有输入张量的形状完全相同,你之前的张量维度/形状不匹配,所以报错。
  • torch.cat是在已有维度上拼接,要求除了拼接维度外的其他维度完全一致。如果你想用cat,需要确保待拼接的张量在非拼接维度上的形状完全对齐,但显然你之前的零张量形状没有和原始张量的分块对应上。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:04:29