numpy.roll

numpy.roll(a, shift, axis=None)

Функция roll() циклическое смещение элементов массива вдоль указанной оси.

Параметры:
a - подобный массиву объект
Массив NumPy или любой объект который может быть преобразован в массив NumPy.
shift - целое число или кортеж целых чисел
Определяет количество шагов смещения по всем осям. Если shift - это число, а параметр axis - это кортеж с перечислением номеров необходимых осей, то каждая указанная ось будет сдвинута на одинаковое количество шагов. Если параметр shift это кортеж целых чисел, то параметр axis так же должен быть кортежем того же размера, при этом каждое число из shift задает смещение соответствующей оси в axis.
axis - целое число или кортеж целых чисел (необязательный)
Определяет ось или в случае кортежа целых чисел оси вдоль которых происходит смещение. Каждое число в кортеже должно соответствовать номеру оси исходнго массива. По умолчанию axis = None что соответствует сжатию исходного массива до одной оси, смещению и последующему восстановлению исходной формы.
Возвращает:
ndarray - массив NumPy
Массив той же формы что и a элементы которого смещены по указанным осям на определенное в shift количество шагов.
Смотрите так же: rot90, flip, fliplr, flipud

Примеры

>>> import numpy as np
>>> 
>>> a = np.array([1, 2, 3, 4, 5])
>>> 
>>> np.roll(a, 1)
array([5, 1, 2, 3, 4])
>>> 
>>> np.roll(a, -1)
array([2, 3, 4, 5, 1])
>>> 
>>> b = np.arange(9).reshape(3, 3)
>>> b
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
>>> 
>>> np.roll(b, 1)
array([[8, 0, 1],
       [2, 3, 4],
       [5, 6, 7]])
>>> 
>>> #  Циклическое перемещение строк:
... np.roll(b, 1, axis = 0)
array([[6, 7, 8],
       [0, 1, 2],
       [3, 4, 5]])
>>> 
>>> #  Циклическое перемещение столбцов:
>>> np.roll(b, 1, axis = 1)
array([[2, 0, 1],
       [5, 3, 4],
       [8, 6, 7]])
>>> 
>>> 
>>> #  Циклическое смещение по нескольким осям является
... #  поочередным смещением вдоль каждой из указанных осей:
... b
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
>>> 
>>> c = np.roll(b, 1, axis = 0)
>>> c
array([[6, 7, 8],
       [0, 1, 2],
       [3, 4, 5]])
>>> d = np.roll(c, 1, axis = 1)
>>> d
array([[8, 6, 7],
       [2, 0, 1],
       [5, 3, 4]])
>>> 
>>> np.roll(b, (1, 1), axis = (0, 1))
array([[8, 6, 7],
       [2, 0, 1],
       [5, 3, 4]])