Mam określony algorytm MCMC, który chciałbym przenieść do C / C ++. Wiele kosztownych obliczeń jest już napisanych w C przez Cython, ale chcę mieć cały sampler napisany w skompilowanym języku, aby móc po prostu pisać opakowania dla Python / R / Matlab / cokolwiek.
Po przeszukiwaniu skłaniam się ku C ++. Kilka odpowiednich bibliotek, które znam, to Armadillo (http://arma.sourceforge.net/) i Scythe (http://scythe.wustl.edu/). Oba starają się naśladować niektóre aspekty R / Matlab, aby ułatwić krzywą uczenia się, co bardzo mi się podoba. Myślę, że kosa trochę lepiej łączy się z tym, co chcę zrobić. W szczególności jego RNG obejmuje wiele dystrybucji, w których Armadillo ma tylko jednolity / normalny, co jest niewygodne. Wydaje się, że Armadillo jest dość aktywnie rozwijany, podczas gdy Scythe widział swoje ostatnie wydanie w 2007.
Zastanawiam się więc, czy ktoś ma doświadczenie z tymi bibliotekami - lub z innymi, które prawie na pewno tęskniłem - a jeśli tak, to czy jest coś, co poleciłoby je innym dla statystyki dobrze znającej Python / R / Matlab ale w mniejszym stopniu ze skompilowanymi językami (nie do końca ignoranccy, ale nie do końca biegli ...).
Zdecydowanie sugeruję, abyś spojrzał na
RCpp
iRcppArmadillo
pakietyR
. Zasadniczo nie trzeba się martwić o opakowania, ponieważ są one już „dołączone”. Ponadto cukier syntaktyczny jest naprawdę słodki (zamierzone słowo).Na marginesie, polecam przyjrzeć się
JAGS
, co robi MCMC i jego kod źródłowy jest w C ++.źródło
Rcpp
zeRcppArmadillo
jest droga. Edycja: Korzystając z Rcpp, masz również dostęp do wszystkich RNG zaimplementowanych w kodzie C leżącym u podstaw R.Boost Random z bibliotek Boost C ++ może być dla Ciebie dobrym rozwiązaniem. Oprócz wielu rodzajów RNG oferuje wiele różnych dystrybucji, z których można czerpać, takich jak
Ponadto, Boost Math uzupełnia powyższe rozkłady, z których można próbkować, dzięki licznym funkcjom gęstości wielu rozkładów. Ma także kilka schludnych funkcji pomocniczych; aby dać ci pomysł:
Jeśli zdecydujesz się użyć Boost, możesz także skorzystać z biblioteki UBLAS, która zawiera wiele różnych typów macierzy i operacji.
źródło
Istnieje wiele bibliotek C / C ++, z których większość koncentruje się na konkretnej dziedzinie problemów (np. Rozwiązaniach PDE). Są dwie obszerne biblioteki, o których myślę, że mogą być szczególnie przydatne, ponieważ są napisane w języku C, ale mają już doskonałe opakowanie w języku Python.
1) IMSL C i PyIMSL
2) trilinos i pytrilinos
Nigdy nie korzystałem z trilinos, ponieważ funkcjonalność dotyczy przede wszystkim metod analizy numerycznej, ale PyIMSL bardzo często używam do pracy statystycznej (w poprzednim życiu też opracowałem oprogramowanie).
W odniesieniu do RNG, oto te w C i Python w IMSL
ODDZIELNY
UNIWERSALNE CIĄGŁE DYSTRYBUCJE
WIELOKROTNE CIĄGŁE DYSTRYBUCJE
STATYSTYKA ZAMÓWIEŃ
PROCESY STOCHASTYCZNE
PRÓBKI I UPRAWNIENIA
FUNKCJE UŻYTKOWE
SEKWENCJA O NISKIEJ ROZKŁADU
źródło