pytorch张量进行尺寸扩展

时间:2020-10-28 01:01:32

标签: pytorch gpu tensor dimensions

使用pytorch张量进行维扩展的方式是什么?

-之前: torch.Size([3,3,3])

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.],
         [24., 25., 26.]]], device='cuda:0', dtype=torch.float64)

-之后: torch.Size([2,3,3,3])

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.],
          [24., 25., 26.]]],


        [[[0., 1., 2.],
          [ 3.,  4.,  5.],
          [ 6.,  7.,  8.]],

         [[ 9., 10., 11.],
          [12., 13., 14.],
          [15., 16., 17.]],

         [[18., 19., 20.],
          [21., 22., 23.],
          [24., 25., 26.]]]], device='cuda:0', dtype=torch.float64)

在numpy下会像这样工作:

b =  np.broadcast_to(a1[None, :,:,:], (2,3,3,3))

在pytorch下如何工作?我想利用GPU。预先感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

可以在新维度上添加unsqeeze(下面用0指定第一个维度,即位置0),然后沿该维度重复两次数据(和一次,即在其他维度上没有重复。

before = torch.tensor(..., dtype=torch.float64, device='cuda:0')
after = before.unsqueeze(0).repeat(2, 1, 1, 1)

答案 1 :(得分:0)

对于您给定的预期结果,我们可以使用torch.Tensor.expand

b = a1.expand([2, 3, 3, 3])