矩阵顺时针旋转90度
clock-wise 90-degree rotation of matrix
我正在尝试构造一个可以按顺时针方式旋转矩阵的函数f
。
函数应该如下所示
f <- function(mat, k) {...}
其中mat
是矩阵,k
是我们顺时针旋转90度的次数。比方说,k=1
表示我们将矩阵旋转 90 度,k=2
表示旋转 180 度,依此类推。
如果 k > 1
,我想将所有那些旋转的矩阵(对于 i = 1,2,....,k)保存到一个列表中,这样我就可以跟踪旋转是如何演变的。
提前致谢!
我想您可以使用包 pracma
中的 rot90
来实现基本的旋转功能。
下面的代码使用递归方法来保存所有那些旋转矩阵 0
到 k
次 clock-wise 旋转
library(pracma)
f <- function(mat, k) {
if (k==0) return(list(mat))
u <- f(mat,(k-1)%%4)
c(u,list(rot90(tail(u,1)[[1]])))
}
例子
给定一个矩阵 mat
如下所示
mat <- matrix(1:12,nrow = 4)
我们会看到
> f(mat,4)
[[1]]
[,1] [,2] [,3]
[1,] 1 5 9
[2,] 2 6 10
[3,] 3 7 11
[4,] 4 8 12
[[2]]
[,1] [,2] [,3] [,4]
[1,] 9 10 11 12
[2,] 5 6 7 8
[3,] 1 2 3 4
[[3]]
[,1] [,2] [,3]
[1,] 12 8 4
[2,] 11 7 3
[3,] 10 6 2
[4,] 9 5 1
[[4]]
[,1] [,2] [,3] [,4]
[1,] 4 3 2 1
[2,] 8 7 6 5
[3,] 12 11 10 9
[[5]]
[,1] [,2] [,3]
[1,] 1 5 9
[2,] 2 6 10
[3,] 3 7 11
[4,] 4 8 12
由于列表的第一个元素是原始矩阵mat
,您可以通过
将其移除
f(mat,k)[-1]
我正在尝试构造一个可以按顺时针方式旋转矩阵的函数f
。
函数应该如下所示
f <- function(mat, k) {...}
其中mat
是矩阵,k
是我们顺时针旋转90度的次数。比方说,k=1
表示我们将矩阵旋转 90 度,k=2
表示旋转 180 度,依此类推。
如果 k > 1
,我想将所有那些旋转的矩阵(对于 i = 1,2,....,k)保存到一个列表中,这样我就可以跟踪旋转是如何演变的。
提前致谢!
我想您可以使用包 pracma
中的 rot90
来实现基本的旋转功能。
下面的代码使用递归方法来保存所有那些旋转矩阵 0
到 k
次 clock-wise 旋转
library(pracma)
f <- function(mat, k) {
if (k==0) return(list(mat))
u <- f(mat,(k-1)%%4)
c(u,list(rot90(tail(u,1)[[1]])))
}
例子
给定一个矩阵 mat
如下所示
mat <- matrix(1:12,nrow = 4)
我们会看到
> f(mat,4)
[[1]]
[,1] [,2] [,3]
[1,] 1 5 9
[2,] 2 6 10
[3,] 3 7 11
[4,] 4 8 12
[[2]]
[,1] [,2] [,3] [,4]
[1,] 9 10 11 12
[2,] 5 6 7 8
[3,] 1 2 3 4
[[3]]
[,1] [,2] [,3]
[1,] 12 8 4
[2,] 11 7 3
[3,] 10 6 2
[4,] 9 5 1
[[4]]
[,1] [,2] [,3] [,4]
[1,] 4 3 2 1
[2,] 8 7 6 5
[3,] 12 11 10 9
[[5]]
[,1] [,2] [,3]
[1,] 1 5 9
[2,] 2 6 10
[3,] 3 7 11
[4,] 4 8 12
由于列表的第一个元素是原始矩阵mat
,您可以通过
f(mat,k)[-1]