首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >python中的图像旋转令人困惑。

python中的图像旋转令人困惑。
EN

Stack Overflow用户
提问于 2019-08-15 00:36:14
回答 1查看 124关注 0票数 1
代码语言:javascript
运行
复制
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中矩阵/图像旋转函数的代码。这适用于所有的情况,我不知道为什么。有人能给我解释一下为什么会起作用吗,因为我似乎找不到一个简单的解决方案,在网上也是简略的和节奏式的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-15 00:52:11

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

代码语言:javascript
运行
复制
[[1, 2, 3],
 [4, 5, 6],
 [7, 8, 9]]

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

代码语言:javascript
运行
复制
[[1, 4, 7],
 [2, 5, 8],
 [3, 6, 9]]

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

代码语言:javascript
运行
复制
[[7, 4, 1],
 [8, 5, 2],
 [9, 6, 3]]

另外,这将是一种更短(也可能更快)的方法:

代码语言:javascript
运行
复制
def rotate(self, matrix):
    return list(zip(*reversed(matrix)))

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

您也可以实现逆时针旋转:

代码语言:javascript
运行
复制
def rotate_ccw(self, matrix):
    return list(reversed(zip(*matrix)))
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57503605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档