R против Matlab: объяснение разницы скоростей для функций rnorm, qnorm и pnorm
Я сравнил производительность встроенных функций R rnorm
, qnorm
и pnorm
к эквивалентным функциям Matlab.
кажется, что rnorm
и pnorm
функции в 3-6 раз медленнее в R, чем в Matlab, тогда как qnorm
функция ca. 40% быстрее в R. я попробовал пакет Rcpp ускорить функции R, используя соответствующие библиотеки C, что привело к уменьшению времени выполнения на ~30%, что все еще значительно медленнее, чем Matlab для rnorm
и pnorm
.
есть ли доступный пакет, который обеспечивает более быстрый способ моделирования нормально распределенных случайных величин в R (кроме использования стандартного )?
2 ответов
чтобы продвинуть мой комментарий к ответу: Да, есть.
library("sos"); findFn("Ziggurat")
находит rziggurat
Я вижу здесь два разных вопроса, по одному в каждом абзаце:
Да, есть разница между языками / системами, такими как R и MATLAB. Часть его связана с интерпретатором, скоростью циклов, скоростью вызовов функций и т. д. Rcpp может помочь там в отношении Matlab, который имеет подлинный JIT-компилятор. У нас есть сравнение между Matlab, R и R+Rcpp для фильтра Калмана в недавней статье о RcppArmadillo.
также есть разница в базовом скомпилированном коде, и да, R не всегда имеет более быструю реализацию, так как R Core (IMHO) идет на точность в первую очередь. (И Rcpp не помогает как таковой: мы просто называем то, что R имеет внутренне.) Это было придумано, например, с примером образца Гиббса для MCMC, который начал Даррен Уилкинсон. Я заметил, что R
rgamma()
гораздо медленнее, чем другие системы. Поэтому, чтобы получить ваш вопрос относительно N (0,1), рисует быстрее: я думаю, нам нужен внесенный зиккурат реализация. Это один из самых быстрых N(0,1) генераторов, и несколько других систем используют его.