考慮以下矩陣,加速矩陣rowMeans操作
nc <- 5000
nr <- 1024
m <- matrix(rnorm(nc*nr), ncol=nc)
我希望採取兩個rowMeans
組相同大小的隨機在該矩陣中採取之間的差。
n <- 1000 # group size
system.time(replicate(100, {
ind1 <- sample(seq.int(nc), n)
ind2 <- sample(seq.int(nc), n)
rowMeans(m[, ind1]) - rowMeans(m[, ind2])
}))
這是很慢的,可惜我聽不懂Rprof的輸出(它似乎大部分的時間用在is.data.frame
?)
建議的東西更有效率?
我已經考慮了以下幾點:
Rcpp
:從我在線閱讀,我相信的r rowMeans是相當有效的,所以目前還不清楚這將有助於在這一步。我想確信瓶頸的真正起點在哪裏,也許我的整個設計並不理想。如果大部分時間都花在爲每個較小的矩陣製作副本上,Rcpp會表現得更好嗎?更新到R-devel,似乎有一個新的
.rowMeans
功能更有效。有人試過嗎?
謝謝。
如果你這樣做了採樣,子集和差異都在犰狳,我會懷疑你獲得一點點。應該足夠快以通過RcppArmadillo嘗試,不是嗎? – 2012-02-28 01:16:21
這很容易,是的,但希望我可以擺脫純粹的R.本質上,我會嘗試何時/如果所有R方法失敗。另外,我沒有在Rcpp中管理隨機數的經驗。 – baptiste 2012-02-28 03:58:40
Rcpp sugar爲您提供了相同的數據流R使用:-) – 2012-02-28 03:59:24