numpy.roll()

Функция numpy.roll() циклически сдвигает элементы массива по указанной оси. Элементы, «выпадающие» с одного края, появляются с другого. Удобно для реализации кольцевых буферов и скользящих окон.

Сигнатура

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

Параметры

  • a — входной массив.

  • shift — сдвиг (целое или кортеж). Положительный — вправо/вниз, отрицательный — влево/вверх.

  • axis — ось сдвига. Если None, массив распрямляется, затем сдвигается и возвращается в форме.

Возвращает

ndarray той же формы.

Пример 1. Сдвиг вправо

import numpy as np

a = np.array([1, 2, 3, 4, 5])
print(np.roll(a, 2))
[4 5 1 2 3]

Пример 2. Сдвиг влево

import numpy as np

a = np.array([1, 2, 3, 4, 5])
print(np.roll(a, -1))
[2 3 4 5 1]

Пример 3. Сдвиг по строкам матрицы

import numpy as np

M = np.array([[1, 2, 3],
              [4, 5, 6],
              [7, 8, 9]])
print(np.roll(M, 1, axis=0))
[[7 8 9]
 [1 2 3]
 [4 5 6]]

Пример 4. Кольцевой буфер показаний

import numpy as np

buf = np.zeros(5)
readings = [21.5, 21.7, 21.8, 22.0, 22.1, 22.2]
for r in readings:
    buf = np.roll(buf, -1)
    buf[-1] = r
print(buf)
[21.7 21.8 22.  22.1 22.2]

Буфер всегда содержит последние 5 значений.

Пример 5. Сдвиг по двум осям

import numpy as np

M = np.array([[1, 2, 3],
              [4, 5, 6]])
print(np.roll(M, shift=(1, 1), axis=(0, 1)))
[[6 4 5]
 [3 1 2]]

См. также

Примечание

Лицензия и источники

Техническое описание функции адаптировано из официальной документации NumPy (https://numpy.org/doc/stable/), BSD-3-Clause License. Примеры и пояснения — © AlashEd Wiki.