You need to enable JavaScript to run this app. 如何为多维PyTorch张量高效添加底部零行与右侧零列?
优惠活动
大模型
产品
解决方案
定价
更多

如何为多维PyTorch张量高效添加底部零行与右侧零列?

张量追加零行、零列的简洁实现方案

你当前的实现通过逐子块切片、硬编码索引赋值完成操作,代码冗余度高,且和固定的维度数值(batch=1、通道数=3)强耦合,更换输入尺寸后需要手动修改切片逻辑。以下是两种通用度更高、代码量更少的实现方式:

方案1:使用torch.nn.functional.pad(最推荐)

这是PyTorch内置的专用张量填充接口,底层为优化的C++实现,运算效率最高,仅需一行核心代码即可完成需求:

import torch
import torch.nn.functional as F

x1 = torch.ones(1, 3, 3, 3)
# pad 参数遵循从最后一维向前的填充顺序:(左填充数, 右填充数, 上填充数, 下填充数)
# 这里设置为宽度方向右补1列0,高度方向下补1行0,其余维度不做改动
output = F.pad(x1, pad=(0, 1, 0, 1))

生成的输出形状为(1, 3, 4, 4),和预期结果完全一致。该方案的优势:

  • 完全动态适配输入形状:不管输入是4维、5维甚至更高维的张量,只要需要在最后两个维度的右侧、底部追加1个零,参数无需任何修改
  • 无硬编码索引逻辑,可直接用于任意尺寸的业务张量
  • 运算效率高于手动Python层拼接实现

方案2:双次torch.cat通用拼接

如果不想引入torch.nn.functional模块,可以通过两次沿指定维度拼接全零块实现,同样不需要手动遍历每个子块:

x1 = torch.ones(1, 3, 3, 3)
# 沿最后一维(宽度)拼接全零列
col_zero = torch.zeros(*x1.shape[:-1], 1)
x_wide = torch.cat([x1, col_zero], dim=-1)
# 沿倒数第二维(高度)拼接全零行
row_zero = torch.zeros(*x_wide.shape[:-2], 1, x_wide.shape[-1])
output = torch.cat([x_wide, row_zero], dim=-2)

这个方案和F.pad的效果完全一致,同样支持任意前置维度的动态适配,不需要根据通道数、batch数的变化修改代码。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 11:06:09