在R中旋转矩阵

Joh*_*nes 49 r rotation matrix

我在R中有一个矩阵,如下所示:

|1|2|3|
|1|2|3|
|1|2|3|
Run Code Online (Sandbox Code Playgroud)

是否有一种简单的方法可以将整个矩阵顺时针旋转90度以获得这些结果?

|1|1|1|
|2|2|2|
|3|3|3|
Run Code Online (Sandbox Code Playgroud)

并再次旋转90度:

|3|2|1|
|3|2|1|
|3|2|1|
Run Code Online (Sandbox Code Playgroud)

Mat*_*erg 91

t 不旋转条目,它沿对角线翻转:

x <- matrix(1:9, 3)
x
##      [,1] [,2] [,3]
## [1,]    1    4    7
## [2,]    2    5    8
## [3,]    3    6    9

t(x)
##      [,1] [,2] [,3]
## [1,]    1    2    3
## [2,]    4    5    6
## [3,]    7    8    9
Run Code Online (Sandbox Code Playgroud)

R矩阵顺时针旋转90度:

您还需要在转置之前反转列:

rotate <- function(x) t(apply(x, 2, rev))
rotate(x)
##      [,1] [,2] [,3]
## [1,]    3    2    1
## [2,]    6    5    4
## [3,]    9    8    7

rotate(rotate(x))
##      [,1] [,2] [,3]
## [1,]    9    6    3
## [2,]    8    5    2
## [3,]    7    4    1

rotate(rotate(rotate(x)))
##      [,1] [,2] [,3]
## [1,]    7    8    9
## [2,]    4    5    6
## [3,]    1    2    3

rotate(rotate(rotate(rotate(x))))
##      [,1] [,2] [,3]
## [1,]    1    4    7
## [2,]    2    5    8
## [3,]    3    6    9
Run Code Online (Sandbox Code Playgroud)

R矩阵90度逆时针旋转:

在反向之前进行转置与逆时针旋转相同:

foo = matrix(1:9, 3)
foo
## [,1] [,2] [,3]
## [1,]    1    4    7
## [2,]    2    5    8
## [3,]    3    6    9

foo <- apply(t(foo),2,rev)
foo

## [,1] [,2] [,3]
## [1,]    7    8    9
## [2,]    4    5    6
## [3,]    1    2    3
Run Code Online (Sandbox Code Playgroud)

  • 适用可能不是最佳的; 来自R-help档案:`rotate = function(mat)t(mat [nrow(mat):1 ,, drop = FALSE]) (11认同)

Rol*_*and 27

m <- matrix(rep(1:3,each=3),3)

     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    1    2    3
[3,]    1    2    3

t(m[nrow(m):1,])

     [,1] [,2] [,3]
[1,]    1    1    1
[2,]    2    2    2
[3,]    3    3    3

m[nrow(m):1,ncol(m):1]

     [,1] [,2] [,3]
[1,]    3    2    1
[2,]    3    2    1
[3,]    3    2    1

t(m)[ncol(m):1,]

     [,1] [,2] [,3]
[1,]    3    3    3
[2,]    2    2    2
[3,]    1    1    1
Run Code Online (Sandbox Code Playgroud)


Sve*_*ein 7

将矩阵旋转180°的简单方法是:

m <- matrix(1:8,ncol=4)
#      [,1] [,2] [,3] [,4]
# [1,]    1    3    5    7
# [2,]    2    4    6    8


rot <- function(x) "[<-"(x, , rev(x))

rot(m)
#      [,1] [,2] [,3] [,4]
# [1,]    8    6    4    2
# [2,]    7    5    3    1

rot(rot(m))
#      [,1] [,2] [,3] [,4]
# [1,]    1    3    5    7
# [2,]    2    4    6    8
Run Code Online (Sandbox Code Playgroud)

  • @PoGibas 函数`[&lt;-` 用于索引替换。在代码 `x[i] &lt;- y` 中,对象 `x` 将被改变。如果您使用 `"[&lt;-"(x, i, y)` 代替,将返回修改后的对象并且不会更改 `x`。 (2认同)