Перейти к содержимому

Как повернуть матрицу на 90 градусов python

  • автор:

Python. Нужно повернуть матрицу на 90 градусов

n = 3
a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
n = len(a)
for i in range(len(a)):
for j in range(len(a[i])):
a[i][j] = a[n-j-1][i]
for z in a:

Дополнен 7 лет назад

n = 3
a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
n = len(a)
for i in range(len(a)):
. for j in range(len(a[i])):
. a[i][j] = a[n-j-1][i]
for z in a:
. print(z)

Голосование за лучший ответ

1 2 3
4 5 6
7 8 9

7 4 1
8 5 2
9 6 3

Столбец становится строкой j=i ты верно написал
Столбец = 2-i с учетом что первый есть нулевой

то бишь обменять
a[i][j] с a[j][2-i] (ну и обменять не значит равно)

Володя БарбаричУченик (178) 7 лет назад

то есть ты имеешь в виду в 6 рядке кода должно быть a[i][j] = a[j][2-i].
ноо оно неправильно работает

В Python, как повернуть матрицу на 90 градусов против часовой стрелки?

Вот счетчик вращения матрицы по часовой стрелке в виде одной строки в чистом Python (т.е. без numpy):

new_matrix = [[m[j][i] for j in range(len(m))] for i in range(len(m[0])-1,-1,-1)] 

Если вы хотите сделать это в функции, то

def rotate_matrix( m ): return [[m[j][i] for j in range(len(m))] for i in range(len(m[0])-1,-1,-1)] 

и так или иначе, результат для

m = [ [1,2,3], [2,3,3], [5,4,3]] 
[[3, 3, 3], [2, 3, 4], [1, 2, 5]] 

Кроме того, если вы хотите обычный транспонирование, то простая однострочная версия чистого Python — это

[[m[j][i] for j in range(len(m))] for i in range(len(m[0]))] 

Поделиться 11 ноября 2018 в 16:55

Вы можете использовать функцию numpy rot90

import numpy as np m = np.array([[1,2,3], [2,3,3], [5,4,3]]) def rotate_matrix(mat): return np.rot90(mat) 

Поделиться 11 ноября 2018 в 16:40

#solution1

print(list(list(x) for x in zip(*m))[::-1]) 

#solution2

print([[x[i] for x in m] for i in range(len(m))][::-1]) 

#solution3

r = [] i = 0 for row in m: listToAdd = [item[i] for item in m] r.append(listToAdd) i +=1 print(r[::-1]) 

Поделиться 30 июня 2021 в 04:23

def rotate_90_degree_anticlckwise(matrix): new_matrix = [] for i in range(len(matrix[0]), 0, -1): new_matrix.append(list(map(lambda x: x[i-1], matrix))) return new_matrix def rotate_90_degree_clckwise(matrix): new_matrix = [] for i in range(len(matrix[0])): li = list(map(lambda x: x[i], matrix)) li.reverse() new_matrix.append(li) return new_matrix def rotate_90_degree_clckwise_by_zip_method(matrix): return list(list(x)[::-1] for x in zip(*matrix)) 

Поделиться 16 сентября 2019 в 14:13

Посмотрите на этот код. Это способ повернуть любую матрицу на 90 градусов с помощью нуля

[Это код, чтобы матрица повернулась на 90 градусов][1]

 n = input("enter input:") l =[] while (n !=""): l.append(n.split(" ")) n = input("enter input:") l1=[] for i in range(len(l[0])): l1.append([]) for j in range (len(l1)): for p in range(len(l)): l1[j].append(l[p][-(j+1)]) for s in l1: print(*s) ''' [1]: https://i.stack.imgur.com/c8jHC.png 

Поделиться 04 июля 2021 в 17:01

Переключитесь по вертикали (влево вправо), затем транспонируйте:

m = [[1,2,3], [2,3,3], [5,4,3]] print([list(x) for x in zip(*[x[::-1] for x in m])]) 

Поделиться 04 июля 2022 в 12:20

Просто переверните матрицу по вертикали, а затем переключите правый верхний треугольник с левым нижним треугольником

def rotate_matrix_ccw(mat): if mat is None: return None n = len(mat) if n == 1: return mat for i in range(n): if len(mat[i]) != n: raise Exception("Matrix must be square") # flip the matrix vertically for j in range(n // 2): for i in range(n): mat[i][j], mat[i][n - 1 - j] = mat[i][n - 1 - j], mat[i][j] # switch the upper-right triangle with the lower-left triangle for i in range(n): for j in range(i): mat[i][j], mat[j][i] = mat[j][i], mat[i][j] return mat 

Поделиться 30 сентября 2020 в 22:43

def rotateMatrix(self, matrix): for i in range(len(matrix)): for j in range(i): matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j] matrix.reverse() 

Поделиться 13 июля 2022 в 03:23

Матрица вращения против часовой стрелки 90 градусов (На месте)

def rotate(matrix): for i in range(len(matrix) - 1, -1, -1): for j in range(i): matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j] matrix.reverse() 

Матрица вращения против часовой стрелки 90 градусов (На месте)

def rotate(matrix): matrix.reverse() for i in range(len(matrix)): for j in range(i): matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j] 

Поделиться 30 августа 2022 в 07:04

Если вы работаете с квадратными матрицами (строки == столбцы), то вы можете использовать это:

list(zip(*reversed(a))) # 90 degrees clockwise 
list(zip(*reversed(a)))[::-1] # 90 degrees counter-clockwise 

Поделиться 16 октября 2022 в 21:54

def rotated_array(array): new_array = np.zeros([array.shape[0], array.shape[1]]) for i in range(array.shape[0]): for j in range(array.shape[1]): t = array.shape[0]-j-1 # To Start with last row and first column new_array[i, j] = array[t, i] return new_array 

Поделиться 13 января 2023 в 07:07

Вы можете пройти циклом по исходной матрице и создать новую. Это мой подход к против часовой стрелке, для другого способа он будет похож. Это не требует, чтобы он был квадратом.

def left_rotate(mat): if not mat: return [] colcount = len(mat[0]) # Initialize empty lists new = [list() for _ in range(colcount)] # Go through the rows, append elements one by one for row in mat: for j in range(colcount): new[j].append(row[colcount - 1 - j]) return new 
>>> print(left_rotate([[1, 2], [3, 4], [5, 6]])) [[2, 4, 6], [1, 3, 5]] 

Поворот матрицы на 90 градусов по часовой стрелке

Author24 — интернет-сервис помощи студентам

Поскольку в стандартной библиотеке Python подобная функция
отсутствует, надо создать собственную специальную
функцию list_rot90(data, times), способную повернуть «двумерный
список» (список списков) на 90 градусов по часовой стрелке.
Функция принимает в себя «двумерный» список (список списков) data и
количество поворотов times, которые необходимо произвести (целое
число, по умолчанию равное 1). Она должна вернуть новый
«двумерный» список (список списков).
Помогите написать предлагаемую функцию. Ничего, кроме этой
функции, в файле решения размещать не надо.

Ввод:
from solution import list_rot90
data = [[8, 2], [9, 5]]
times = 1
print(data, times)
print(list_rot90(data, times))

Как повернуть массив на 90 градусов python

Проще всего это будет сделать с помощью Numpy:

import numpy as np l = [[0, 0, 0, 0], [0, 0, 0, 1], [0, 0, 0, 1], [0, 0, 0, 1]] a = np.array(l) # a = array([[0, 0, 0, 0], # [0, 0, 0, 1], # [0, 0, 0, 1], # [0, 0, 0, 1]], dtype=int64) # поворот: np.rot90(a) # a = array([[0, 1, 1, 1], # [0, 0, 0, 0], # [0, 0, 0, 0], # [0, 0, 0, 0]], dtype=int64) # можно несколько раз повернуть: np.rot90(a, k=2) # a = array([[1, 0, 0, 0], # [1, 0, 0, 0], # [1, 0, 0, 0], # [0, 0, 0, 0]], dtype=int64) # "вернуть" к обычному списку списков: np.rot90(a).tolist() # => [[0, 1, 1, 1], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]] 

Соответственно для поворота по часовой стрелке используйте np.rot90(a, k=3) (270 градусов).

Если не использовать Numpy, то для поворота по часовой стрелке есть такой способ:

def transposed(matrix): return [[*col] for col in zip(*matrix)] def rot90: return list(map(reversed, transposed(matrix))) # или в одно действие def rot90(matrix): return [list(reversed(col)) for col in zip(*matrix)] 

. а для поворота против часовой:

def rot90(matrix): return [list(row) for row in list(zip(*matrix))[::-1]] 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *