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

如何合并尺寸不同的张量以生成指定结构的目标张量?

如何拼接列数不同的PyTorch张量?

现有两个列数不同的PyTorch张量:

import torch

a = torch.tensor([
    [101,  103],
    [101,  1045]
])

b = torch.tensor([
    [101,  777, 227],
    [101,  888, 228]
])

想要得到如下形式的张量c:

c = torch.tensor([
    [101,  103, 0],
    [101,  1045, 0],
    [101,  777, 227],
    [101,  888, 228]
])

直接使用torch.cat((a, b), dim=0)会失败,原因是a是2行2列,b是2行3列,PyTorch要求拼接的张量除了拼接维度外,其他维度的尺寸必须一致,这里列数不匹配,所以无法直接拼接。

正确实现方法

先把列数少的张量a补零到和b相同的列数,再进行拼接:

方法1:用torch.nn.functional.pad补零(推荐)

# 计算需要补充的列数
pad_cols = b.size(1) - a.size(1)
# 对a的右侧补pad_cols个0
a_padded = torch.nn.functional.pad(a, (0, pad_cols), mode='constant', value=0)
# 按行拼接补零后的a和b
c = torch.cat((a_padded, b), dim=0)

方法2:手动构造零张量拼接

# 创建和a行数相同、列数为需要补充数量的零张量
zeros = torch.zeros(a.size(0), b.size(1)-a.size(1), dtype=a.dtype)
# 把a和零张量按列拼接得到补零后的a
a_padded = torch.cat((a, zeros), dim=1)
# 再按行拼接得到c
c = torch.cat((a_padded, b), dim=0)

两种方法运行后得到的c都符合预期:

tensor([[ 101,  103,    0],
        [ 101, 1045,    0],
        [ 101,  777,  227],
        [ 101,  888,  228]])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 22:25:26