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

如何向PyTorch张量的每个内部子张量添加0元素

PyTorch张量添加0元素的几种实现方案

嘿,这个需求其实挺常见的,我给你几个简单又高效的实现思路,你可以根据自己的张量维度来选:

方法一:用torch.cat拼接(最直观)

这是最直接的方式,我们可以创建一个和原张量对应维度一致的全0张量,然后和原张量在指定维度上拼接。

比如假设你的原张量是二维的,每个子张量都是2个元素:

import torch

# 原张量
orig_tensor = torch.tensor([[0.1111, 0.6667], [0.2222, 0.7777]])
# 创建对应形状的全0张量,这里我们要给每个子张量加1个0,所以形状是(2,1)
zero_tensor = torch.zeros(orig_tensor.shape[0], 1)
# 在维度1上拼接
result = torch.cat([orig_tensor, zero_tensor], dim=1)
print(result)
# 输出:tensor([[0.1111, 0.6667, 0.0000],
#               [0.2222, 0.7777, 0.0000]])

如果你的原张量是一维的,比如orig_tensor = torch.tensor([0.1111, 0.6667]),那直接拼接一个0张量就行:

result = torch.cat([orig_tensor, torch.tensor([0.0])])

方法二:用torch.nn.functional.pad填充

如果你的需求是给张量末尾固定填充0,用pad函数会更灵活,尤其是需要填充多个元素的时候:

import torch.nn.functional as F

orig_tensor = torch.tensor([[0.1111, 0.6667], [0.2222, 0.7777]])
# pad的参数格式是(left, right, top, bottom),这里我们要在每个子张量的右侧加1个0,所以设置(0,1,0,0)
result = F.pad(orig_tensor, (0, 1, 0, 0), mode='constant', value=0)
print(result)

这个方法的好处是不需要手动创建零张量,直接指定填充位置和数量就行。

方法三:用索引扩展(适合动态修改)

如果你想直接在原张量的基础上扩展并赋值0,也可以这么做:

orig_tensor = torch.tensor([[0.1111, 0.6667], [0.2222, 0.7777]])
# 先扩展张量的维度,比如把每个子张量从2维变成3维
result = torch.zeros(orig_tensor.shape[0], orig_tensor.shape[1]+1)
# 把原张量的值赋值到前两列
result[:, :-1] = orig_tensor
print(result)

这种方式适合需要提前规划张量形状的场景,赋值也很直观。

需要注意的是,以上方法都要保证张量的设备(CPU/GPU)一致,如果你的原张量在GPU上,记得把零张量或者填充操作也放到对应的设备上哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 17:03:10