【发布时间】:2013-05-17 11:26:41
【问题描述】:
我目前正在尝试加速使用 Rcpp 计算目标函数的优化过程。我当前的设置与此类似:
largeConstantVector <- readVector()
result <- optim(..., eval=function(par) evalRcpp(par, largeConstantVector))
和evalRcpp 函数
double evalRcpp(NumericVector par, NumericVector constVector){
NumericVector parT = transform(par)
NumericVector constVectorT = transform(constVector)
return aggregate(parT, constVectorT)
}
我想做的是只计算一次NumericVector constVectorT = transform(constVector),并将结果保存在 C++ 对象中,并且只在 R 端使用对该对象的引用。所以程序应该是这样的:
largeConstantVector <- readVector()
objReference <- calculateCommonStuff(largeConstantVector)
result <- optim(..., eval=function(par) evalRcpp(par, objReference))
和evalRcpp 函数
double evalRcpp(NumericVector par, const SomeClass& objRef){
NumericVector parT = transform(par)
NumericVector constVectorT = objRef.constVectorT
return aggregate(parT, constVectorT)
}
使用 Rcpp 可以实现这种方法吗?是否可以防止不必要的计算和数据复制(即将迭代数据“保留在 C++ 端”)?
提前致谢。
【问题讨论】: