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+ 次浏览

开启您的职业生涯

完成课程获得认证

立即开始
广告