将张量展开几个维度

问题描述 投票:0回答:1

在 PyTorch 中,给定一个长度为

n
的张量(向量),如何通过几个维度扩展它,将张量中的每个条目增加和复制到这些维度?例如,给定一个大小为
[3]
的张量,将其扩展为 size=
[3,2,5,5]
,这样添加的维度具有与原始张量对应的值。在这种情况下,让大小=
[3]
和向量=
[1,2,3]
使得大小为
[2,5,5]
的第一个张量具有值
1
,第二个具有所有值
2
,第三个具有所有值
3
.

另外,如何将大小为

[3,2]
的向量展开为
[3,2,5,5]

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

pytorch tensor
1个回答
3
投票

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

torch.Tensor.expand
扩展到目标形状的视图:

>>> x = torch.rand(3)
>>> target = [3,2,5,5]

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

一个很好的解决方法是使用

torch.Tensor.reshape
torch.Tensor.view
执行多次解压:

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

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

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

对于更一般的实现,其中

x
可以是多维的:

>>> 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)
© www.soinside.com 2019 - 2024. All rights reserved.