我正在编写的程序非常优化,因此需要加快这个过程。与我的问题类似的可重复示例如下所示,
x= seq(1,10000, by = 1000)
下面的函数,测量在给定维度行x和列为2的矩阵上计算向量化(?)运算的时间。
testy = function(x){
testmatrix <- matrix(runif(x*2,0,10), nrow=x, ncol=2)
y=microbenchmark(rowSums(testmatrix),unit="ms",times=1)$time
return(y)
}
下面的函数,使用R
的内部for循环测量计算矩阵运算的时间testy2 = function(x){
testmatrix <- matrix(runif(x*2,0,10), nrow=x, ncol=2)
y=microbenchmark(apply(testmatrix, 1, function(x) sum(x)), unit="ms", times=1)$time
return(y)
}
绘制每个函数的性能以增加矩阵的大小会在对数缩放计算时间上产生显着差异。
plot(x, log(sapply(x,testy2))) # apply (internal for loop)
lines(x, log(sapply(x,testy))) # vectorized operation?
我怀疑我的程序中的效率问题是我在给定矩阵上使用“apply”版本的计算。然后它意味着我需要使用某种矢量化版本来计算此操作,例如函数testy。
我的第一个问题是
以上性能差异确实来自
rowSums(x)vs apply(x,1,sum)?
在我的程序中,相当于上面例子中的“求和”,它更复杂,涉及数值积分。
然后提高我的速度, 那么这意味着我必须编写代码的“rowSums”版本吗?非常感谢你们,