How to rotate a matrix?
Let’s learn how to rotate a matrix in Numpy. We are going to see a few tricks in that matter.
Rotation by 90 degrees
With Numpy it is very easy to rotate matrix 90 degrees. There is dedicated rot90 Numpy method.
Rotation by 270 degrees
To rotate 270 degrees just add 3 as a parameter to rot90 function. This parameter makes 3 rounds of 90 degrees rotation (counter clockwise).
This is 270 degrees rotation but we can also say that this is left rotation because this is how to rotate an matrix left direction.
Как перевернуть матрицу в python
Given a square matrix, turn it by 90 degrees in an anti-clockwise direction without using any extra space
Examples:
Input:
Matrix: 1 2 3
4 5 6
7 8 9Output: 3 6 9
2 5 8
1 4 7
Input:
Matrix: 1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
Output: 4 8 12 16
3 7 11 15
2 6 10 14
1 5 9 13
Note: An approach that requires extra space is already discussed here.
Example no1 – Inplace rotate square matrix by 90 degrees by forming cycles:
To solve the problem follow the below idea:
To solve the question without any extra space, rotate the array in form of squares, dividing the matrix into squares or cycles. For example,
A 4 X 4 matrix will have 2 cycles. The first cycle is formed by its 1st row, last column, last row, and 1st column. The second cycle is formed by the 2nd row, second-last column, second-last row, and 2nd column. The idea is for each square cycle, to swap the elements involved with the corresponding cell in the matrix in an anti-clockwise direction i.e. from top to left, left to bottom, bottom to right, and from right to top one at a time using nothing but a temporary variable to achieve this
Dry run of the above approach:
First Cycle:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16Moving first group of four elements (elements
of 1st row, last row, 1st column and last column) of first cycle
in counter clockwise.
4 2 3 16
5 6 7 8
9 10 11 12
1 14 15 13
Moving next group of four elements of
first cycle in counter clockwise
4 8 3 16
5 6 7 15
2 10 11 12
1 14 9 13
Moving final group of four elements of
first cycle in counter clockwise
4 8 12 16
3 6 7 15
2 10 11 14
1 5 9 13
Second Cycle:
4 8 12 16
3 6 7 15
2 10 11 14
1 5 9 13
Fixing second cycle
4 8 12 16
3 7 11 15
2 6 10 14
1 5 9 13
Функция np.fliplr() в Python: как перевернуть массив
Функция Numpy.fliplr() переворачивает записи в каждой строке влево и вправо. Столбцы сохраняются, но отображаются в другом порядке, чем раньше.
Что такое функция np.fliplr в Python?
np.fliplr() — это библиотечная функция numpy, которая переворачивает массив (записи в каждом столбце) слева направо в Python. Функция numpy flipr() принимает массив в качестве аргумента и возвращает тот же массив, что и перевернутый влево-вправо. Форма массива сохраняется.
Синтаксис
Параметры
Функция fliplr() принимает в качестве параметра array.
Возвращаемое значение
Функция fliplr() возвращает тот же массив, что и перевернутый влево-вправо.
Примеры программ с методом fliplr()
- Напишем программу, показывающую работу функции fliplr() в Python.
В этом примере мы видим, что, взяв массив 2×2, мы перевернули элемент из той же строки при вращении влево-вправо.
- Напишем программу, которая берет массив 3×3 и переворачивает элементы с помощью fliplr() и печатает результат.
В этом примере мы видим, что получаем массив с элементами, перевернутыми по строкам, взяв матрицу 3×3 и используя функцию fliplr().
вращение матрицы на 90 градусов по часовой стрелке с использованием списка в Python
Я пытаюсь повернуть матрицу 3 * 3 по часовой стрелке на 90 градусов в python. Я определил, что элемент в [i] [j] переходит в [j] [new_i]. Здесь new_i зависит от предыдущего i, поэтому я создал для него функцию, называемую круговым вычитанием.
если я равен 0, то new_i равен 2
если я равен 1, то new_i равен 1
если i равно 2, то new_i равно 0
после казни это дало мне неожиданные результаты.
Я распечатал все, что происходит на каждой итерации. Я не могу понять, как одни элементы заменяются другими.
входная матрица была
Ожидаемый результат был:
- Пожалуйста, попробуйте указать на ошибку в приведенном выше коде. Я знаю, что это можно сделать с помощью numpy очень легко, но я хотел попробовать это вручную.
Для этого вы можете использовать функцию numpy rot90: np.rot90
k — указывает количество оборотов
оси — указывает направление вращения
Выход
Проблема в вашем коде
В коде отсутствуют отступы (но при условии, что они верны)
линия :
назначает новую ссылку на матричную переменную.
В python по умолчанию не копируется по значению. Вы можете использовать функцию глубокого копирования: copy.deepcopy (x [, memo])
ИЛИ
В противном случае каждое изменение, которое вы вносите в new_matrix, также выполняется в исходной матрице. (поскольку new_matrix — это просто ссылка на матрицу)
- Спасибо. Вот чего я хотел.
Вы можете сделать что-то вроде этого:
Выход
В for col in zip(*matrix) получает столбец матрицы, как только у вас есть столбцы, которые вам нужно перевернуть, используя list(reversed(col)) , затем воспользуйтесь списком, чтобы собрать все вместе:
Понимание приведенного выше списка эквивалентно следующему меньше питонический для цикла: