0
我有一個4維數組,我需要計算兩個維的和。我看到apply
出奇的慢。在N維數組中的邊距最快的總和:apply(X,MARGIN = c(1,2),sum)
我曾嘗試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
我會給RCPP一試,但RcppArmadillo
沒有4維數組,據我所知。
如何儘可能快地計算(apply(X, MARGIN=c(1,2), sum)
)?
Thanks @Gregor。我們可以總結不連續的維度嗎? 'apply(X,MARGIN = c(1,3),sum)' – alberto
否請參閱'?rowSums'中的文檔:*「dims:對於行\ *,總和或平均值超過維dims + 1,。 ..;對於col \ *它已超過維度1:dims。「*您可以**使用'aperm'來對這些維度進行排列,從而使您想要概括的所有維度都是連續的。 – Gregor