Python 中的矩阵旋转
在 Python 中旋转一个矩阵,可以通过多种方法实现,例如常用的**转置和反转**方法,该方法通过将行转换为列,列转换为行来旋转矩阵。
常见方法
以下是一些我们可以用来将矩阵顺时针旋转 90 度的常用方法。
逐层旋转
临时矩阵法
转置和反转
二维矩阵
让我们考虑一个 n x n 的二维矩阵,我们需要将此矩阵顺时针旋转 90 度。
| 1 | 5 | 7 |
| 9 | 6 | 3 |
| 2 | 1 | 3 |
使用逐层旋转
此方法包括逐层旋转矩阵,不需要为另一个矩阵分配额外的空间。二维矩阵的旋转过程从最外层开始,向内层移动。旋转完每一层的四个角后。
示例
在下面的示例代码中,矩阵被划分为四个**同心层**,对于每一层,操作如下:
将顶行移动到右侧
将右列移动到底部
将底行移动到左侧
将左列移动到顶部
class Solution:
def rotate(self, matrix):
n = len(matrix)
for i in range(n // 2):
for j in range(i, n - i - 1):
# Save the top element
temp = matrix[i][j]
# Move left to top
matrix[i][j] = matrix[n - j - 1][i]
# Move bottom to left
matrix[n - j - 1][i] = matrix[n - i - 1][n - j - 1]
# Move right to bottom
matrix[n - i - 1][n - j - 1] = matrix[j][n - i - 1]
# Move top to right
matrix[j][n - i - 1] = temp
return matrix
ob1 = Solution()
print(ob1.rotate([[1, 5, 7], [9, 6, 3], [2, 1, 3]]))
输入
[[1,5,7],[9,6,3],[2,1,3]]
输出
[[2, 9, 1], [1, 6, 5], [3, 3, 7]]
旋转后的矩阵
| 2 | 9 | 1 |
| 1 | 6 | 5 |
| 3 | 3 | 7 |
使用临时矩阵法
顾名思义,此方法创建一个临时矩阵来存储旋转后的矩阵。在创建临时矩阵后,使用旋转后的元素更新原始矩阵。
示例
在下面的示例代码中,**'temp_matrix'** 初始化一个临时矩阵,该矩阵存储旋转后的元素。通过从上到下提取元素并将其放置为一行来填充临时矩阵。
class Solution:
def rotate(self, matrix):
temp_matrix = []
column = len(matrix) - 1
# Create the rotated matrix
for column in range(len(matrix)):
temp = []
for row in range(len(matrix) - 1, -1, -1):
temp.append(matrix[row][column])
temp_matrix.append(temp)
# Copy the rotated matrix back to the original matrix
for i in range(len(matrix)):
for j in range(len(matrix)):
matrix[i][j] = temp_matrix[i][j]
return matrix
ob1 = Solution()
print(ob1.rotate([[10, 15, 27], [11, 16, 8], [43, 17, 35]]))
输入
[[10, 15, 27], [11, 16, 8], [43, 17, 35]]
输出
[[43, 11, 10], [17, 16, 15], [35, 8, 27]]
旋转后的矩阵
| 43 | 11 | 10 |
| 17 | 16 | 15 |
| 35 | 8 | 27 |
使用转置和反转
此方法高效且常用,旋转矩阵的过程涉及以下两个主要步骤。
**转置矩阵**:将矩阵的所有行转换为列,列转换为行。
**反转每一行(元素)**:在下一步中,反转每一行中的元素以获得所需的旋转。
示例
在下面的示例代码中,位置**'(i,j)'**处的元素与位置**'(j,i)'**处的元素交换,并且每行都被反转以获得矩阵所需的旋转。
class Solution:
def rotate(self, matrix):
n = len(matrix)
# Transpose the matrix
for i in range(n):
for j in range(i, n):
matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]
# Reverse each row
for i in range(n):
matrix[i].reverse()
return matrix
ob1 = Solution()
print(ob1.rotate([[1, 5, 7], [9, 6, 3], [2, 1, 3]]))
输入
[[1,5,7],[9,6,3],[2,1,3]]
输出
[[2, 9, 1], [1, 6, 5], [3, 3, 7]]
旋转后的矩阵
| 2 | 9 | 1 |
| 1 | 6 | 5 |
| 3 | 3 | 7 |
广告
数据结构
网络
关系数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP