简单的 Torch7 相当于 numpy.roll

Simple Torch7 equivalent to numpy.roll

有没有什么简单的方法可以在 torch7 中像 numpy.roll 和 python 中的 numpy.roll 轴那样滚动张量?

谢谢!

你可以用torch的permute实现numpy的rollaxis的效果。 rollaxis 需要一个轴移动的开始和结束位置,而 permute 需要所有轴的新位置。例如。对于 3 维张量 np.rollaxis(x, 0, 3)(将第一个轴移动到末尾)将等同于 x:permute(2, 3, 1).

我不知道可以轻松替代 numpy 的 roll,但 scatter 似乎是一个不错的选择。使用所需的维度和移位后元素的新顺序调用它。 (每行需要一个新的元素顺序。) 以下示例将 x 的每一行(包含具有随机值的 2 行和 4 列)2 沿最后一个轴向右移动:

th> x = torch.zeros(2, 4):uniform(0, 10)
th> y = torch.zeros(2, 4):scatter(2, torch.LongTensor{{3, 4, 1, 2}, {3, 4, 1, 2}}, x)
th> x
 0.7295  3.2218  7.3979  5.5500
 8.4354  3.6722  5.5463  3.4323
[torch.DoubleTensor of size 2x4]
th> y
 7.3979  5.5500  0.7295  3.2218
 5.5463  3.4323  8.4354  3.6722
[torch.DoubleTensor of size 2x4]

也许你可以尝试 lutorpy 这样你就可以在 python 中使用 numpy 数组,然后将其传递给 torch 模块并将其转换回来。