Нашли ошибку?
среднийNumPy 2.5.3

flip, roll, rot90

Развернуть массив по оси, циклически сдвинуть элементы или повернуть матрицу.

Нужно знать:Оси: axis и keepdims

Содержание статьи

Коротко

  • np.flip(a, axis) — обратный порядок вдоль оси; без axis — по всем осям. flipud / fliplr — короткие имена для осей 0 и 1.
  • np.flip для одномерного массива — то же, что a[::-1]; оба дают представление.
  • np.roll(a, k) — циклический сдвиг: элементы, ушедшие за край, появляются с другой стороны. Положительный k — вправо.
  • roll без axis работает с вытянутым массивом, а затем возвращает исходную форму.
  • np.rot90(a, k) поворачивает на k × 90° против часовой стрелки.

Синтаксис

np.flip(a, axis=None)
np.flipud(a), np.fliplr(a)
np.roll(a, shift, axis=None)
np.rot90(a, k=1)

Параметры

ПараметрЧто делаетПо умолчанию
axisось разворота или сдвига; None — все оси (flip) или вытянутый массив (roll)None
shiftна сколько позиций сдвинуть; отрицательное — влевообязательный
kсколько раз повернуть на 90°; отрицательное — по часовой стрелке1

Примеры

Данные для примеровиспользуются во всех примерах ниже
m = np.array([[1, 2, 3],
              [4, 5, 6]])
Разворот по осям
print(np.flip(np.array([1, 2, 3, 4])))
print(np.flip(m, axis=0))       # строки в обратном порядке (flipud)
np.flip(m, axis=1)              # столбцы в обратном порядке (fliplr)
Вывод
[4 3 2 1]
[[4 5 6]
 [1 2 3]]
array([[3, 2, 1],
       [6, 5, 4]])
Разворот по всем осям
np.flip(m)                      # по всем осям сразу
Вывод
array([[6, 5, 4],
       [3, 2, 1]])
Циклический сдвиг
days = np.array(["пн", "вт", "ср", "чт", "пт"])
print(np.roll(days, 1))         # сдвиг вправо, последний уходит в начало
np.roll(days, -2)               # сдвиг влево
Вывод
['пт' 'пн' 'вт' 'ср' 'чт']
array(['ср', 'чт', 'пт', 'пн', 'вт'], dtype='<U2')
Сдвиг по оси
print(np.roll(m, 1, axis=1))    # по столбцам
np.roll(m, 1)                   # без axis — как по вытянутому массиву
Вывод
[[3 1 2]
 [6 4 5]]
array([[6, 1, 2],
       [3, 4, 5]])
Поворот матрицы
print(np.rot90(m))              # на 90° против часовой стрелки
np.rot90(m, k=-1)               # по часовой
Вывод
[[3 6]
 [2 5]
 [1 4]]
array([[4, 1],
       [5, 2],
       [6, 3]])

Подводные камни

roll — не сдвиг с пропусками

Для «значения за вчера» roll подставляет в первый день значение из последнего. Нужен сдвиг с пропуском — сделайте срез или используйте shift в pandas.

Предыдущее значение через roll
prices = np.array([10, 11, 13, 12])
np.roll(prices, 1)              # «вчерашняя цена» для первого дня взялась из последнего
Вывод
array([12, 10, 11, 13])