简单的Torch7等效于numpy.roll

有没有像 numpy.roll 和 numpy.rollaxis 这样的简单方法在 torch7 中滚动张量?

谢谢!

点赞
用户3760780
用户3760780

你可以使用 torch 的 permute 实现 numpy 的 rollaxis 效果。虽然 rollaxis 需要指定要移动的轴的起始位置和终止位置,但 permute 则需要指定所有轴的新位置。例如,对于一个 3 维张量,np.rollaxis(x, 0, 3)(将第 1 个轴移动到末尾)等价于 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]
2015-12-27 13:28:28
用户6262499
用户6262499

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

2016-04-27 17:40:44