Коротко
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)Noneshiftна сколько позиций сдвинуть; отрицательное — влевообязательный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.
prices = np.array([10, 11, 13, 12])
np.roll(prices, 1) # «вчерашняя цена» для первого дня взялась из последнегоВывод
array([12, 10, 11, 13])