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) генераторов, и несколько других систем используют его.