algorithm - 假设矩阵空间为 max(M,N)*max(M,N) 是否有顺时针旋转 M*N 二维矩阵的好方法

标签 algorithm matrix

感谢任何建议。搜索互联网但没有运气 假设原始矩阵有足够大的尺寸用于原地旋转

{{1,2},{3,4},{5,6}} 到 {{5,3,1},{6,4,2}}

1 2

3 4

5 6

顺时针旋转到

5 3 1

6 4 2

谢谢。

最佳答案

一种简单的方法是将矩阵左右翻转或上下翻转(可以通过单个列或行的 in-place reversing 轻松完成)和就地矩阵转置相结合,请参阅 mcdowella 的 link 。例如,请参见 Numpy 的 source code 函数的 rot90,它正是执行这两个步骤(swapaxis 基本上是一个转置)。

您可以一步完成所有操作,但这可能需要以某种螺旋模式遍历矩阵。这将花费相当大的努力才能正确实现,并且考虑到用于交换和转置的高效算法(例如针对缓存访问优化)的可用性,这甚至可能更慢。

关于algorithm - 假设矩阵空间为 max(M,N)*max(M,N) 是否有顺时针旋转 M*N 二维矩阵的好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26857741/

相关文章:

c++ - C++ 中矩阵的动态名称(Armadillo 库)

matrix - 处理 CUDA 中的矩阵 : understanding basic concepts

c++ - 按时间从视频中获取帧(openCV)

algorithm - 如何判断一个整数是不是3的幂?

python - 从字典中的值列表创建矩阵

r - 如何在散点图矩阵中插入趋势线

r - 将矩阵从模式 A 转换为模式 B

algorithm - 我是否可以始终假设角值 !=1 的 mvp 矩阵正在执行缩放?

algorithm - 如何检查2个数字是否具有相同的位数和长度?

c++ - 获取 UTF-8 编码的 std::string 的实际长度?