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