翻转矩阵

时间:2013-11-06 19:11:31

标签: r

嗨,每个爱恨的人R:

假设您想要转换矩阵M

      [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6
[3,]    7    8    9

到N

       [,1] [,2] [,3]
[1,]    3    2    1
[2,]    6    5    4
[3,]    9    8    7

您需要做的就是

N<-M[,c(3:1)]

N的结构仍然是一个矩阵

但是,当您想要转换矩阵M

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

到N

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

如果你这样做     N'LT; -M [,C(3:1)] R会给你

N
[1] 3 2 1
现在N是一个向量!不是矩阵!

我的解决方案是     N'LT; -M%*%DIAG(3)[,C(3:1)] 然而,它需要很大的空间来存储单位矩阵。

有更好的主意吗?

2 个答案:

答案 0 :(得分:7)

您正在寻找:

N<-M[,c(3:1),drop = FALSE] 

阅读?Extract了解详情。这也是FAQ。这种行为是人们对“应该”在R中的方式最常见的争论之一。我的总体印象是,很多人都认为drop = FALSE可能是一个更合理的默认,但这种行为是如此之久以至于改变它将极大地破坏大量现有代码。

答案 1 :(得分:1)

A=t(matrix(1:25,5,5))
B=matrix(0,5,5)
for(i in 1:5){
  B[i,(nrow(A)+1-i)]=1
}

A
# [,1] [,2] [,3] [,4] [,5]
# [1,]    1    2    3    4    5
# [2,]    6    7    8    9   10
# [3,]   11   12   13   14   15
# [4,]   16   17   18   19   20
# [5,]   21   22   23   24   25

A%*%B
# [,1] [,2] [,3] [,4] [,5]
# [1,]    5    4    3    2    1
# [2,]   10    9    8    7    6
# [3,]   15   14   13   12   11
# [4,]   20   19   18   17   16
# [5,]   25   24   23   22   21