将张量扩展几个维度

Expand the tensor by several dimensions

在 PyTorch 中,给定一个大小为 [3] 的张量,如何将其扩展几个维度到大小 [3,2,5,5],以便添加的维度具有原始张量的对应值。例如,使 [1,2,3] 使得大小为 [2,5,5] 的第一个张量具有值 1,第二个具有所有值 2,第三个具有所有值 [=16] =].

另外,如何将大小为[3,2]的向量展开为[3,2,5,5]

我能想到的一种方法是先用 ones-Like 创建一个相同大小的向量,然后再创建 einsum,但我认为应该有更简单的方法。

您可以先取消压缩适当数量的单例维度,然后使用 torch.Tensor.expand:

扩展到目标形状的视图
>>> x = torch.rand(3)
>>> target = [3,2,5,5]

>>> x[:, None, None, None].expand(target)

一个很好的解决方法是使用 torch.Tensor.reshape or torch.Tensor.view 执行多次解压缩:

>>> x.view(-1, 1, 1, 1).expand(target)

这允许使用更通用的方法来处理任意目标形状:

>>> x.view(len(x), *(1,)*(len(target)-1)).expand(target)

对于更通用的实现,其中 x 可以是 multi-dimensional:

>>> x = torch.rand(3, 2)

# just to make sure the target shape is valid w.r.t to x
>>> assert list(x.shape) == list(target[:x.ndim])

>>> x.view(*x.shape, *(1,)*(len(target)-x.ndim)).expand(target)