2015-12-27 3 views

ответ

0

Вы можете получить эффект numpy's rollaxis с фонариком permute. В то время как rollaxis требует, чтобы начальное и конечное положение одной оси перемещалось, permute требует новых положений всей оси. Например. для трехмерного тензора np.rollaxis(x, 0, 3) (перемещение 1-й оси до конца) будет эквивалентно x:permute(2, 3, 1).

Я не знаю о простой замене для numpy's 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] 
+0

Спасибо, а как насчет рулона numpy? –

+0

Oups, я добавил редактирование для ролика. – aleju

+0

Еще раз спасибо, что, возможно, работаю, но я работаю с очень длинными тензорами, поэтому это непрактично ... Так что, думаю, если бы вам пришлось реализовать катящиеся тензоры размера варианта в варианте shift, как бы вы это сделали? –

0

Может вы можете попробовать lutorpy, чтобы вы могли использовать массив numpy в python, а затем передать его в модуль факела и преобразовать его обратно.

Смежные вопросы