Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 假设矩阵空间为max(M,N)*max(M,N),是否有顺时针旋转M*N 2D矩阵的好方法_Algorithm_Matrix - Fatal编程技术网

Algorithm 假设矩阵空间为max(M,N)*max(M,N),是否有顺时针旋转M*N 2D矩阵的好方法

Algorithm 假设矩阵空间为max(M,N)*max(M,N),是否有顺时针旋转M*N 2D矩阵的好方法,algorithm,matrix,Algorithm,Matrix,谢谢你的建议。在网上搜索,但没有运气 假设原始矩阵具有足够大的大小以便在适当的位置旋转 {1,2},{3,4},{5,6}到{5,3,1},{6,4,2} 或 1 2 34 5.6 顺时针旋转至 5 3 1 6 4 2 谢谢 一种简单的方法是将矩阵左右或上下翻转(这可以通过单个列或行的翻转来实现)和就地矩阵变换相结合,参见mcdowella的。参见Numpy函数的例子,它正好执行这两个步骤(swapaxis基本上是一个转置) 您可以在一个步骤中完成所有操作,但这可能需要以某种螺旋模式对矩阵进行迭

谢谢你的建议。在网上搜索,但没有运气 假设原始矩阵具有足够大的大小以便在适当的位置旋转

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

1 2

34

5.6

顺时针旋转至

5 3 1

6 4 2


谢谢

一种简单的方法是将矩阵左右或上下翻转(这可以通过单个列或行的翻转来实现)和就地矩阵变换相结合,参见mcdowella的。参见Numpy函数的例子,它正好执行这两个步骤(swapaxis基本上是一个转置)


您可以在一个步骤中完成所有操作,但这可能需要以某种螺旋模式对矩阵进行迭代。这需要花费相当多的精力来实现,而且,考虑到交换和转置的高效算法(例如,针对缓存访问进行了优化)的可用性,这可能会更慢。

您是指转置吗?如果是,请参见。如果没有,你能举个例子吗?你所说的“假设有足够的空间”到底是什么意思?如果可以使用任意大的辅助空间,则将操作称为“就地”会产生误导。@Codor,很抱歉误导,足够的空间意味着矩阵的实际大小将是max(M,N)*max(M,N),因此在rotation@mcdowella,简单的例子是{{1}、{2}、{3}到{1,2,3}当然,这个简单的例子就是一个换位的例子,从一个3行1列的矩阵到一个1行3列的矩阵。这使我怀疑你仍然没有正确解释你的要求。我认为一个最小的例子需要一个
m*n
矩阵,其中
m
n
都大于
1