r语言 - NumericVector 和 vector 之间是否存在性能差异<double>?



假设一个使用NumericVector,另一个在他们的Rcpp代码中使用vector<double>。这两种用法之间是否存在显着差异,尤其是在性能方面?

一般来说,是的。

所有的 Rcpp(11) 类型都是围绕底层SEXP对象的"瘦代理对象"(我们在几个地方讨论过,谈话、幻灯片、我的书,等等)。这意味着当您从 R 转到 C++ 以及从 C++ 返回到 R 时,不会创建任何副本。

但是,使用标准C++类型(如 std::vector<T>)通常需要副本。

因此,随着N的增加,您应该很容易看到一些琐碎的测试脚本的差异。

就我个人而言,我通常喜欢"干净"地使用C++/STL类型来"感觉更C++"的代码,但仍然意识到性能损失。 通常,这并不重要,因为C++解决方案比在纯 R 解决方案中替换的解决方案更快。

但你的问题是,一个是否支配另一个,而另一个显然是肯定的。

相关内容

最新更新