矩阵顺时针旋转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 来实现基本的旋转功能。

下面的代码使用递归方法来保存所有那些旋转矩阵 0k 次 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]