【问题标题】:Most efficient way to run many repetitions of an Rcpp function for a simulation study?为模拟研究运行多次 Rcpp 函数重复的最有效方法?
【发布时间】:2013-03-16 23:34:08
【问题描述】:

我编写了一个 Rcpp 函数,该函数从总体中返回样本,为了测试估计方法,我想运行它数千或数百万次。似乎调用 Rcpp 需要一些开销,而像 replicate(100,myFunction()) 这样的东西所花费的时间比我预期的要长得多。

最好的方法是什么? rep,*apply,replicate,将循环本身放入 C++ 中?

【问题讨论】:

  • 我通常将 sapply 用于类似的事情,但复制只是重新包装的 sapply,所以应该需要大约相同的时间。你打电话的myFunction() 是什么?是否可以对其进行调整以缩短运行时间?
  • 我认为不容易。我的函数是对采样包中的 UPtille 函数的重新实现,它使用 Tille 的方法进行采样。它迭代 N-k 次以产生 k 个样本,在我的例子中 N=4600 和 k=40。
  • 我会在 C++ 中执行 for 循环

标签: r simulation rcpp sampling


【解决方案1】:

如果您担心性能,您希望尽量减少从 R 到 C++ 的调用次数——而不是像您所说的那样数千或数百万次

所以 Baptiste 是正确的:如果可以的话,在 C++ 级别执行 for() 循环。

另外请注意,RcppArmadillo 的最新版本现在有 sample() 的 C++ 版本,这可能让您也可以在 C++ 中完成该部分。也就是说,我对“UPtille”以及它的作用一无所知,所以您可能会被现有的 R 实现所困扰。

【讨论】:

  • 这似乎并没有太大的不同,但我认为我的代码的一次迭代只会使开销相形见绌。 sample() 函数会快很多,但我使用的是 Tille 的方法,因为我需要它具有某些属性。一次迭代的运行时间大约是 Core2Duo 上的 8 秒,这可能是我能得到的最佳时间
猜你喜欢
  • 2018-03-31
  • 2018-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-09
  • 2023-03-11
  • 2019-03-30
  • 1970-01-01
相关资源
最近更新 更多