python中的图像旋转令人困惑

2024-03-28 23:16:47 发布

您现在位置:Python中文网/ 问答频道 /正文

def rotate(self, matrix):
    n = len(matrix)
    for i in range(n):
        for j in range(i+1, n):
            matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]
    for i in range(n):
        matrix[i].reverse()
    return matrix

下面是Python中矩阵/图像旋转函数的代码。这适用于所有情况,我不知道为什么。有人能告诉我为什么这样做,因为我似乎找不到一个简单的解决方案,网上也简略和Python。你知道吗


Tags: 函数代码in图像selfforlenreturn
1条回答
网友
1楼 · 发布于 2024-03-28 23:16:47

例如,如果从以下矩阵开始:

[[1, 2, 3],
 [4, 5, 6],
 [7, 8, 9]]

在第一个嵌套的for循环块中,它基本上转置了矩阵:

[[1, 4, 7],
 [2, 5, 8],
 [3, 6, 9]]

然后反转每一行以顺时针旋转90度:

[[7, 4, 1],
 [8, 5, 2],
 [9, 6, 3]]

作为旁注,这将是一种更短(可能更快)的方法:

def rotate(self, matrix):
    return list(zip(*reversed(matrix)))

它基本上是相同的,但是使用内置函数zip来转换矩阵和一个列表理解,以便简洁。它还可以旋转矩形矩阵。主要区别在于,原始代码修改了执行就地旋转的函数参数(matrix),因此具有较低的空间复杂度。你知道吗

同样,也可以实现逆时针旋转:

def rotate_ccw(self, matrix):
    return list(reversed(zip(*matrix)))

相关问题 更多 >