我有一个4维数组,我需要计算其两个维度的总和.我看到这apply
是非常缓慢的.
我试过这个compiler
库,但速度几乎没有提高:
library(compiler)
X <- array(2, dim=c(1000,20,10,125))
suma <- function(X){
apply(X, MARGIN=c(1,2), sum)
}
suma.cmp <- cmpfun(suma)
benchmark(suma.cmp(X), suma(X), replications = 50)
# test replications elapsed relative user.self sys.self user.child
#1 suma.cmp(X) 50 24.616 1.000 24.164 0.424 0
#2 suma(X) 50 24.892 1.011 24.440 0.416 0
Run Code Online (Sandbox Code Playgroud)
我会试试Rcpp,但RcppArmadillo
据我所知,没有4维数组.
如何apply(X, MARGIN=c(1,2), sum)
尽可能快地进行此计算()?
rowSums
大约快15倍.它很快转到C,所以我认为很难改进它.
microbenchmark(
apply = suma(X),
rowsum = rowSums(X, dims = 2),
times = 10
)
# Unit: milliseconds
# expr min lq mean median uq max neval cld
# apply 692.14893 818.67450 828.66410 829.47926 874.23754 885.36019 10 b
# rowsum 48.39865 49.85822 51.37486 51.09379 52.04339 56.29224 10 a
identical(rowSums(X, dims = 2), suma(X))
# [1] TRUE
Run Code Online (Sandbox Code Playgroud)