A 是一个 4 维数组,尺寸为 100*100*100*100。我想从 A 的最后两个维度中选择 10000 个子矩阵。B 和 C 是长度为 10000 的向量。它们是选择标准。B 指定 A 的行号,C 指定列号。
A <- array(rnorm(100^4), dim=c(100,100,100,100))
B <- sample( nrow(A) , 10000 , repl = TRUE )
C <- sample( ncol(A) , 10000 , repl = TRUE )
D <- array(0, dim=c(10000,100,100))
使用 for 循环:
system.time(
for ( i in 1:10000 ){
D[i,,] <- A[B[i],C[i],,]
})
user system elapsed
10.20 0.14 10.34
使用映射:
sub_array <- function(b,c) return(A[b,c,,])
system.time(D <- mapply(FUN = sub_array, B, C, SIMPLIFY='array'))
user system elapsed
9.77 3.75 29.17
这甚至更慢。有没有更快的方法来做到这一点?谢谢。