0

我目前正在尝试加速使用 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++ 端”保留迭代数据)?

提前致谢。

4

1 回答 1

1

是的,正如您所说,可以将迭代数据保留在“C++ 端”,但这更多的是 C++ 程序设计问题,而不是 Rcpp 特有的任何问题。

使用私有状态数据创建一个类,使用函数创建类对象,然后在迭代期间对其进行更新。

Rcpp 将有助于轻松调用这些成员函数,但它不会为您创建框架的其余部分。

于 2013-05-17T03:26:41.187 回答