首页 > 解决方案 > 将列和行添加到多维 torch.tensor(一种总结或填充)

问题描述

张量应使用额外的行零(底部)和列零(右侧)进行更新。

我的解决方案将在下面提供。有没有更好(实际上更简单)的?

输入:( «ones»只是为了澄清 - 数字可能不同,因为在我的情况下,张量的大小完全相同,但其中包含真实值)

tensor([[[[1., 1., 1.],
          [1., 1., 1.],
          [1., 1., 1.]],

         [[1., 1., 1.],
          [1., 1., 1.],
          [1., 1., 1.]],

         [[1., 1., 1.],
          [1., 1., 1.],
          [1., 1., 1.]]]])

输出:

tensor([[[[1., 1., 1., 0.],
          [1., 1., 1., 0.],
          [1., 1., 1., 0.],
          [0., 0., 0., 0.]],

         [[1., 1., 1., 0.],
          [1., 1., 1., 0.],
          [1., 1., 1., 0.],
          [0., 0., 0., 0.]],

         [[1., 1., 1., 0.],
          [1., 1., 1., 0.],
          [1., 1., 1., 0.],
          [0., 0., 0., 0.]]]])

可能的解决方案:

x1 = torch.ones(1, 3, 3, 3)

z2 = torch.cat((torch.cat((x1[0, 0, :], torch.zeros(1, 3)), 0), torch.zeros(4, 1)), 1)
z3 = torch.cat((torch.cat((x1[0, 1, :], torch.zeros(1, 3)), 0), torch.zeros(4, 1)), 1)
z4 = torch.cat((torch.cat((x1[0, 2, :], torch.zeros(1, 3)), 0), torch.zeros(4, 1)), 1)

output_t = torch.zeros(1, 3, 4, 4)

output_t[0, 0, :] = z2
output_t[0, 1, :] = z3
output_t[0, 2, :] = z4

output_t

标签: pytorch

解决方案


您可以使用 pytorch 的torch.nn.ConstantPad?d功能来做到这一点。

from torch import nn

x1 = torch.ones(1, 3, 3, 3)

pad_value = 0
pad_func = nn.ConstantPad1d((0, 1, 0, 1), pad_value)

output_t = pad_func(x1)

你也可以nn.ConstantPad1dnn.ConstantPad2d或交换nn.ConstantPad3d。所有人都使用相同的设置完成了您想要的操作。

然后还有 numpy 的np.pad

x1 = torch.ones(1, 3, 3, 3)

pad_value = 0

output_n = np.pad(x1.numpy(), (0, 0), (0, 0), (0, 1), (0, 1)), "constant", constant_values=pad_value)
output_t = torch.from_numpy(output_n)

推荐阅读