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

如何在PyTorch中对张量列表左侧补零至最长张量长度?

PyTorch实现张量列表左侧补零的方法

在PyTorch中,使用torch.nn.utils.rnn.pad_sequence可以快速实现张量列表的右侧补零,示例代码及输出如下:

import torch

f = [
    [0,1],
    [0, 3, 4],
    [4, 3, 2, 4, 3]
]

torch.nn.utils.rnn.pad_sequence(
    [torch.tensor(part) for part in f],
    batch_first=True
)

输出结果:

tensor([[0, 1, 0, 0, 0],
        [0, 3, 4, 0, 0],
        [4, 3, 2, 4, 3]])

若要实现左侧补零,得到如下期望输出:

tensor([[0, 0, 0, 0, 1],
        [0, 0, 0, 3, 4],
        [4, 3, 2, 4, 3]])

可以通过以下两种方法实现:

方法一:翻转序列后补零再翻转

利用pad_sequence的右侧补零逻辑,先将每个序列翻转,补零后再翻转回来,间接实现左侧补零:

import torch

f = [
    [0,1],
    [0, 3, 4],
    [4, 3, 2, 4, 3]
]

# 转换为张量并翻转每个序列
tensors = [torch.tensor(seq) for seq in f]
reversed_tensors = [t.flip(dims=[0]) for t in tensors]

# 对翻转后的序列右侧补零
padded_reversed = torch.nn.utils.rnn.pad_sequence(reversed_tensors, batch_first=True)

# 再次翻转得到左侧补零的结果
padded_left = padded_reversed.flip(dims=[1])

print(padded_left)

方法二:手动计算padding并拼接零张量

直接计算每个序列需要补零的长度,手动拼接零张量和原序列,最后堆叠成批量张量:

import torch

f = [
    [0,1],
    [0, 3, 4],
    [4, 3, 2, 4, 3]
]

tensors = [torch.tensor(seq) for seq in f]
max_seq_len = max(t.shape[0] for t in tensors)
padded_tensors = []

for t in tensors:
    pad_length = max_seq_len - t.shape[0]
    # 生成左侧补零的张量并拼接
    padded_tensor = torch.cat([torch.zeros(pad_length, dtype=t.dtype), t], dim=0)
    padded_tensors.append(padded_tensor)

# 堆叠所有补零后的张量
padded_left = torch.stack(padded_tensors)

print(padded_left)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 12:06:25