维度不同的 Tensor 也能相加 ?

这篇博客介绍了如何在PyTorch中处理不同形状的张量相加问题,通过自动填充对应维度使得张量形状匹配,然后进行加法运算。示例展示了将形状为[1,2,3,4]和[3,4]的张量相加,以及将形状为[3,2,1,4]和[3,4]的张量相加的过程,结果分别得到形状为[1,2,3,4]和[3,2,3,4]的张量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

维度不同的 Tensor 如何相加呢?但是是自动填充对应维度,使维度相同后再相加。

如 torch.Size([1, 2, 3, 4]) 与 torch.Size([3, 4]) 相加,先将后者填充为 torch.Size([1, 2, 3, 4]) ,二者相加后 shape 为 [1, 2, 3, 4]

torch.Size([3, 2, 1, 4]) 与 torch.Size([3, 4]) 相加,则先将两者填充为 torch.Size([3, 2, 3, 4]) ,二者相加后 shape 为 [3, 2, 3, 4],有种类似取最小公倍数的感觉。

代码示例1

import torch

a=torch.arange(1*2*3*4).reshape([1,2,3,4])    # torch.Size([1, 2, 3, 4])
b=torch.arange(3*4).reshape([3,4])      # torch.Size([3, 4])

print(f'a: {a}')
print(f'b: {b}')
print(f'(a+b): {a+b}')
print(f'(a+b).shape: {(a+b).shape}')     # torch.Size([1, 2, 3, 4])

输出结果:

a: tensor([[[[ 0,  1,  2,  3],
          [ 4,  5,  6,  7],
          [ 8,  9, 10, 11]],

         [[12, 13, 14, 15],
          [16, 17, 18, 19],
          [20, 21, 22, 23]]]])
          
b: tensor([[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]])
        
(a+b): tensor([[[[ 0,  2,  4,  6],
          [ 8, 10, 12, 14],
          [16, 18, 20, 22]],

         [[12, 14, 16, 18],
          [20, 22, 24, 26],
          [28, 30, 32, 34]]]])
(a+b).shape: torch.Size([1, 2, 3, 4])

代码示例2

a=torch.arange(1*2*3*4).reshape([3,2,1,4])    # torch.Size([3, 2, 1, 4])
b=torch.arange(3*4).reshape([3,4])      # torch.Size([3, 4])

print(f'a: {a}')
print(f'b: {b}')
print(f'(a+b): {a+b}')
print(f'(a+b).shape: {(a+b).shape}')     # torch.Size([3, 2, 3, 4])

输出结果:

a: tensor([[[[ 0,  1,  2,  3]],
         [[ 4,  5,  6,  7]]],

        [[[ 8,  9, 10, 11]],
         [[12, 13, 14, 15]]],

        [[[16, 17, 18, 19]],
         [[20, 21, 22, 23]]]])
         
b: tensor([[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]])
        
(a+b): tensor([[[[ 0,  2,  4,  6],
          [ 4,  6,  8, 10],
          [ 8, 10, 12, 14]],

         [[ 4,  6,  8, 10],
          [ 8, 10, 12, 14],
          [12, 14, 16, 18]]],


        [[[ 8, 10, 12, 14],
          [12, 14, 16, 18],
          [16, 18, 20, 22]],

         [[12, 14, 16, 18],
          [16, 18, 20, 22],
          [20, 22, 24, 26]]],


        [[[16, 18, 20, 22],
          [20, 22, 24, 26],
          [24, 26, 28, 30]],

         [[20, 22, 24, 26],
          [24, 26, 28, 30],
          [28, 30, 32, 34]]]])
(a+b).shape: torch.Size([3, 2, 3, 4])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ctrl A_ctrl C_ctrl V

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值