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.