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 |
广告