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

更新於: 2024年9月6日

5K+ 次瀏覽

開啟您的職業生涯

完成課程獲得認證

立即開始
廣告