Eu tenho um algoritmo MCMC específico que gostaria de portar para C / C ++. Grande parte da computação dispendiosa já está em C via Cython, mas quero que todo o amostrador seja escrito em uma linguagem compilada, para que eu possa escrever wrappers para Python / R / Matlab / o que for.
Depois de bisbilhotar, estou inclinado para C ++. Conheço algumas bibliotecas relevantes: Armadillo (http://arma.sourceforge.net/) e Scythe (http://scythe.wustl.edu/). Ambos tentam emular alguns aspectos do R / Matlab para facilitar a curva de aprendizado, que eu gosto muito. Foice quadrada um pouco melhor com o que eu quero fazer, eu acho. Em particular, seu RNG inclui muitas distribuições nas quais o Tatu possui apenas uniforme / normal, o que é inconveniente. O tatu parece estar em desenvolvimento bastante ativo, enquanto o Scythe viu seu último lançamento em 2007.
Então, o que eu estou querendo saber é se alguém tem experiência com essas bibliotecas - ou outras que eu quase certamente perdi - e se sim, se há algo para recomendar uma sobre as outras para um estatístico muito familiarizado com Python / R / Matlab mas menos ainda com idiomas compilados (não completamente ignorantes, mas não exatamente proficientes ...).
Eu sugiro fortemente que você dê uma olhada
RCpp
eRcppArmadillo
pacotesR
. Basicamente, você não precisa se preocupar com os invólucros, pois eles já estão "incluídos". Além disso, o açúcar sintático é realmente doce (trocadilhos).Como observação lateral, eu recomendaria que você desse uma olhada
JAGS
, o que faz o MCMC e seu código fonte estarem em C ++.fonte
Rcpp
comRcppArmadillo
é o caminho a percorrer. Edit: Usando Rcpp, você também tem acesso a todas as RNG implmented no código C subjacente R.O Boost Random das bibliotecas Boost C ++ pode ser uma boa opção para você. Além de muitos tipos de RNGs, oferece uma variedade de diferentes distribuições para extrair, como
Além disso, o Boost Math complementa as distribuições acima, das quais você pode experimentar várias funções de densidade de muitas distribuições. Ele também possui várias funções de ajuda; Só para lhe dar uma ideia:
Se você decidiu usar o Boost, também pode usar sua biblioteca UBLAS, que apresenta uma variedade de tipos e operações de matriz diferentes.
fonte
Existem inúmeras bibliotecas C / C ++ por aí, a maioria focada em um domínio de problemas específico de (por exemplo, solucionadores de PDE). Existem duas bibliotecas abrangentes que você pode achar especialmente úteis, porque elas são escritas em C, mas têm excelentes wrappers Python já escritos.
1) IMSL C e PyIMSL
2) trilinos e pirtrilinos
Eu nunca usei trilinos, pois a funcionalidade é principalmente em métodos de análise numérica, mas uso muito o PyIMSL para trabalhos estatísticos (e em uma vida profissional anterior, desenvolvi o software também).
Com relação aos RNGs, aqui estão os em C e Python no IMSL
DISCRETO
DISTRIBUIÇÕES CONTÍNUAS UNIVARIADAS
DISTRIBUIÇÕES CONTÍNUAS MULTIVARIADAS
ESTATÍSTICAS DO PEDIDO
PROCESSOS ESTOCÁSTICOS
AMOSTRAS E PERMUTAÇÕES
FUNÇÕES DE UTILIDADE
SEQUÊNCIA DE BAIXA DISCREPÂNCIA
fonte