R - 从底部和行方向将矩阵转换为向量

thi*_*oso 3 r vector matrix

我有以下矩阵:

m <- matrix(1:9, ncol=3, byrow=TRUE)
m
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6
[3,]    7    8    9
Run Code Online (Sandbox Code Playgroud)

我需要展平,即转换为向量。

然而,不要沿着列:

as.vector(m)
[1] 7 4 1 8 5 2 9 6 3
Run Code Online (Sandbox Code Playgroud)

我需要得到的向量沿着行从底部到右侧,例如:

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

我怎样才能做到这一点?

G. *_*eck 6

1)反转第一个维度,转置然后解开:

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

2)这是第二种方法,它计算索引然后应用它们。它更长但避免了转置:

nr <- nrow(m)
nc <- ncol(m)
c(m[cbind(rep(nr:1, each = nc), 1:nc)])
## [1] 7 8 9 4 5 6 1 2 3
Run Code Online (Sandbox Code Playgroud)

2a) (2) 的一种变体是使用一维索引:

m[rep(nr:1, each = nc) + nr * (0:(nc - 1))]
## [1] 7 8 9 4 5 6 1 2 3
Run Code Online (Sandbox Code Playgroud)

笔记

我尝试了 100x100 和 1000x1000 矩阵。在第一种情况下 (1) 是最快的,在第二种情况下 (2) 和 (2a) 是最快的,因此如果速度是一个问题,实际尺寸似乎会对选择产生影响。