Есть ли разница в производительности между NumericVector и vector<double>?

Предположим, кто-то использует NumericVector а другой использует vector<double> в их коде Rcpp. Есть ли заметная разница между двумя способами, особенно в производительности?

1 ответ

Решение

Вообще-то да.

Все типы Rcpp(11) являются "тонкими прокси-объектами" (о которых мы говорим в нескольких местах: разговоры, слайды, моя книга, ...) вокруг нижележащего SEXP объекты. Это означает, что при переходе с R на C++ и при переходе с C++ на R. копии не создаются.

Использование стандартных типов C++, таких как std::vector<T>Однако, как правило, требуется копия.

Таким образом, вы должны легко увидеть разницу в каком-то тривиальном тестовом скрипте как N увеличивается достаточно.

Лично мне вообще нравится "чистое" использование типов C++ / STL для кода, который "чувствует больше C++- иш", но при этом осознает снижение производительности. Часто это не имеет большого значения, так как решение C++ быстрее, чем то, что вы заменяете в чистом R-решении.

Но твой вопрос, если один доминирует над другим, а другой ясно, да.

Другие вопросы по тегам