NumericVector和vector<double>之间是否有性能差异?

4

假设一个人在他们的Rcpp代码中使用了NumericVector,而另一个人使用了vector<double>。这两种用法之间有显著的区别吗,特别是在性能方面?


3
好的,那你为什么不试一试呢? - Carl Witthoft
2
@CarlWitthoft,我在简单情况下进行了一些基准测试,但没有明显的差异。这就是为什么我想更全面地了解它的原因。 - Kun Ren
1个回答

10

一般来说是的。

所有的Rcpp(11)类型都是“薄代理对象”(我们在多个地方讨论过,包括演讲、幻灯片、我的书籍等等),它们围绕着底层的SEXP对象。(这意味着从R到C++以及从C++返回R时不会产生副本。)

然而,使用像std::vector<T>这样的标准C++类型通常需要一个副本。

因此,当N足够大时,您应该很容易看到在某些微不足道的测试脚本上的差异。

就我个人而言,我通常喜欢使用C++ / STL类型进行“清晰”的代码,这种代码“感觉更像C++”,但也意识到性能惩罚。通常情况下,这并不重要,因为C++解决方案比在纯R解决方案中替换的方案更快。

但是你的问题是哪个占主导地位,答案非常明确,是前者占主导地位。


6
假设这个向量已传递给C++程序。那么对于仅在程序内部使用此类向量的程序,或者是将它们传递但一次性传递相对于其他计算可以忽略不计的耗时程序,哪一个执行速度更快呢? - G. Grothendieck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接