有没有简单的方法在torch7中滚动张量,如numpy.roll和numpy.rollaxis在python中?
谢谢!
答案 0 :(得分:0)
你可以用火炬permute来达到numpy rollaxis
的效果。虽然rollaxis
要求移动一个轴的起始位置和结束位置,但permute
需要所有轴的新位置。例如。对于三维张量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]
答案 1 :(得分:0)
也许你可以尝试lutorpy所以你可以在python中使用numpy数组,然后将它传递给torch模块并将其转换回来。