PyTorch 中的左移张量
Left shift tensor in PyTorch
我有一个形状为 (1, N, 1)
的张量 a
。我需要沿维度 1
左移张量并添加一个新值作为替换值。我找到了一种方法来完成这项工作,下面是代码。
a = torch.from_numpy(np.array([1, 2, 3]))
a = a.unsqueeze(0).unsqeeze(2) # (1, 3, 1), my data resembles this shape, therefore the two unsqueeze
# want to left shift a along dim 1 and insert a new value at the end
# I achieve the required shifts using the following code
b = a.squeeze
c = b.roll(shifts=-1)
c[-1] = 4
c = c.unsqueeze(0).unsqueeze(2)
# c = [[[2], [3], [4]]]
我的问题是,有没有更简单的方法来做到这一点?谢谢
您实际上不需要压缩和执行您的操作,然后取消压缩您的输入张量 a
。相反,您可以直接执行这两个操作,如下所示:
# No need to squeeze
c = torch.roll(a, shifts=-1, dims=1)
c[:,-1,:] = 4
# No need to unsqeeze
# c = [[[2], [3], [4]]]
我有一个形状为 (1, N, 1)
的张量 a
。我需要沿维度 1
左移张量并添加一个新值作为替换值。我找到了一种方法来完成这项工作,下面是代码。
a = torch.from_numpy(np.array([1, 2, 3]))
a = a.unsqueeze(0).unsqeeze(2) # (1, 3, 1), my data resembles this shape, therefore the two unsqueeze
# want to left shift a along dim 1 and insert a new value at the end
# I achieve the required shifts using the following code
b = a.squeeze
c = b.roll(shifts=-1)
c[-1] = 4
c = c.unsqueeze(0).unsqueeze(2)
# c = [[[2], [3], [4]]]
我的问题是,有没有更简单的方法来做到这一点?谢谢
您实际上不需要压缩和执行您的操作,然后取消压缩您的输入张量 a
。相反,您可以直接执行这两个操作,如下所示:
# No need to squeeze
c = torch.roll(a, shifts=-1, dims=1)
c[:,-1,:] = 4
# No need to unsqeeze
# c = [[[2], [3], [4]]]