gpt4 book ai didi

r - 使用内联和 Rcpp 调用 R 函数仍然与原始 R 代码一样慢

转载 作者:行者123 更新时间:2023-12-01 06:55:15 25 4
gpt4 key购买 nike

我需要评估一个需要长循环的函数(后验分布)。显然我不想在 R 本身中这样做,所以我使用“inline”和“Rcpp”来实现 C++。但是,我发现在每个循环使用 R 函数的情况下,cxx 函数的运行速度与运行 R 代码一样慢(请参阅下面的代码和输出)。特别是,我需要在每个循环中使用多元正态累积分布函数,因此我使用 mvtnorm 包中的 pmvnorm()。

如何在 cxxfunction 中使用这个 R 函数并加快速度?我想了解为什么会发生这种情况,以便将来可以在 cxxfunction 中使用其他 R 函数。

谢谢你。

test <- cxxfunction(
signature(Num="integer",MU="numeric",Sigma="numeric"),
body='
RNGScope scope;

Environment stats("package:mvtnorm");
Function pmvnorm = stats["pmvnorm"];

int num = Rcpp::as<int>(Num);
NumericVector Ret(1);
NumericMatrix sigma(Sigma);
NumericVector mu(MU);
NumericVector zeros(2);

for(int i = 0; i < num; i++)
{
Ret = pmvnorm(Named("upper",zeros),Named("mean",MU),Named("sigma",sigma));
}
return Ret;
',plugin="Rcpp"
)

system.time(
test(10000,c(1,2),diag(2))
)
user system elapsed
5.64 0.00 5.75

system.time(
for(i in 1:10000){
pmvnorm(upper=c(0,0),mean=c(1,2),sigma=diag(2))
}
)
user system elapsed
5.46 0.00 5.57

最佳答案

您正在从 Rcpp 调用 R 函数。

这不能比直接调用 R 函数更快。

您的绑定(bind)约束是您调用的函数,而不是您如何调用它。 Rcpp 不是某种神奇的 R-to-C++ 编译器。

关于r - 使用内联和 Rcpp 调用 R 函数仍然与原始 R 代码一样慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16111449/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com