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