我有以下矩阵:
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)
我怎样才能做到这一点?
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) 是最快的,因此如果速度是一个问题,实际尺寸似乎会对选择产生影响。
| 归档时间: |
|
| 查看次数: |
568 次 |
| 最近记录: |