简单的 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 模块并将其转换回来。
有没有什么简单的方法可以在 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 模块并将其转换回来。