首页 > 解决方案 > 矩阵顺时针旋转 90 度

问题描述

我正在尝试构建一个f可以以顺时针方式旋转矩阵的函数。

该函数应如下所示

f <- function(mat, k) {...}

其中mat是矩阵,k是我们执行 90 度顺时针旋转的次数。比方说,k=1意味着我们将矩阵旋转 90 度,k=2意味着 180 度,依此类推。

如果k > 1,我想将所有这些旋转矩阵(对于 i = 1,2,....,k)保存到一个列表中,这样我就可以跟踪旋转如何演变。

提前致谢!

标签: rmatrixrotation

解决方案


我猜你可以使用rot90from packagepracma来实现基本的旋转功能。

下面的代码使用递归方法将所有这些旋转矩阵保存0k顺时针旋转的时间

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

由于 list 的第一个元素是原始矩阵mat,您可以通过以下方式将其删除

f(mat,k)[-1]

推荐阅读