如何在PyTorch张量中沿某个维度添加元素



我有一个张量inps,它的大小为[64, 161, 1],我有一些新数据d,它的尺寸为[64, 161]。如何将d添加到inps,使新大小为[64, 161, 2]

使用.unsqueeze()torch.cat()有一种更干净的方法,它直接使用PyTorch接口:

import torch
# create two sample vectors
inps = torch.randn([64, 161, 1])
d = torch.randn([64, 161])
# bring d into the same format, and then concatenate tensors
new_inps = torch.cat((inps, d.unsqueeze(2)), dim=-1)
print(new_inps.shape)  # [64, 161, 2]

本质上,对第二维度进行解压缩已经使两个张量形成相同的形状;你只需要小心地沿着正确的维度松开。同样,不幸的是,串联的名称与其他类似名称的NumPy函数不同,但行为相同。请注意,不是让torch.cat通过提供dim=-1来计算维度,您也可以显式地提供要连接的维度,在这种情况下,用dim=2替换它。

请记住串联和堆叠之间的区别,这对张量维度的类似问题很有帮助。

您必须首先重塑d,使其具有第三个维度,沿着该维度可以进行串联。当它有了第三个维度,并且两个张量有相同数量的维度后,你可以使用torch.cat((inps,d(,2(来堆叠它们。

old_shape = tuple(d.shape)
new_shape = old_shape + (1,)
inps_new = torch.cat( (inps, d.view( new_shape ), 2)

或者,您可以通过压缩更大的张量和堆叠来实现这一点:

inps = torch.randn([64, 161, 1])
d = torch.randn([64, 161])
res = torch.stack((inps.squeeze(), d), dim=-1)
res.shape
>>> [64, 161, 2]

最新更新