考虑以下矩阵,加速矩阵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