Ich habe einen bestimmten MCMC-Algorithmus, den ich nach C / C ++ portieren möchte. Ein Großteil der teuren Berechnung erfolgt in C bereits über Cython, aber ich möchte, dass der gesamte Sampler in einer kompilierten Sprache geschrieben wird, damit ich nur Wrapper für Python / R / Matlab / whatever schreiben kann.
Nachdem ich mich umgesehen habe, neige ich zu C ++. Einige relevante Bibliotheken, die ich kenne, sind Armadillo (http://arma.sourceforge.net/) und Scythe (http://scythe.wustl.edu/). Beide versuchen, einige Aspekte von R / Matlab zu emulieren, um die Lernkurve zu vereinfachen, was mir sehr gefällt. Scythe passt ein bisschen besser zu dem, was ich tun möchte, denke ich. Insbesondere enthält sein RNG viele Verteilungen, bei denen Armadillo nur Uniform / Normal hat, was unpraktisch ist. Armadillo scheint sich in einer ziemlich aktiven Entwicklung zu befinden, während Scythe seine letzte Veröffentlichung im Jahr 2007 sah.
Ich frage mich also, ob jemand Erfahrung mit diesen Bibliotheken hat - oder andere, die ich mit ziemlicher Sicherheit vermisst habe - und wenn ja, ob es für einen Statistiker, der mit Python / R / Matlab sehr vertraut ist, etwas zu empfehlen gibt aber weniger mit kompilierten Sprachen (nicht völlig unwissend, aber nicht genau kompetent ...).
Ich würde dringend empfehlen, dass Sie einen Blick auf
RCpp
undRcppArmadillo
Pakete fürR
. Grundsätzlich müssen Sie sich keine Sorgen um die Wrapper machen, da diese bereits "enthalten" sind. Darüber hinaus ist der syntaktische Zucker wirklich süß (Wortspiel beabsichtigt).Als Nebenbemerkung empfehle ich Ihnen einen Blick auf
JAGS
MCMC und dessen Quellcode in C ++.quelle
Rcpp
mitRcppArmadillo
dem Weg zu gehen. Bearbeiten: Mit Rcpp haben Sie auch Zugriff auf alle RNGs, die im C-CodeBoost Random aus den Boost C ++ - Bibliotheken könnte gut zu Ihnen passen. Zusätzlich zu vielen Arten von RNGs bietet es eine Vielzahl von verschiedenen Verteilungen, aus denen Sie auswählen können, z
Darüber hinaus ergänzt Boost Math die obigen Verteilungen, aus denen Sie eine Stichprobe erstellen können, mit zahlreichen Dichtefunktionen vieler Verteilungen. Es hat auch einige nette Hilfsfunktionen; nur um ihnen eine idee zu geben:
Wenn Sie sich für Boost entschieden haben, können Sie auch die UBLAS-Bibliothek verwenden, die eine Vielzahl verschiedener Matrixtypen und -operationen enthält.
quelle
Es gibt zahlreiche C / C ++ - Bibliotheken, die sich hauptsächlich auf eine bestimmte Problemdomäne konzentrieren (z. B. PDE-Löser). Es gibt zwei umfassende Bibliotheken, von denen ich mir vorstellen kann, dass sie für Sie besonders nützlich sind, da sie in C geschrieben sind, aber bereits ausgezeichnete Python-Wrapper enthalten.
1) IMSL C und PyIMSL
2) Trilinos und Pytrilinos
Ich habe noch nie Trilinos verwendet, da die Funktionalität hauptsächlich auf numerischen Analysemethoden beruht, aber ich verwende PyIMSL häufig für statistische Arbeiten (und in einem früheren Arbeitsleben habe ich auch die Software entwickelt).
In Bezug auf RNGs sind hier die in C und Python in IMSL
DISKRET
UNIVARIATE KONTINUIERLICHE VERTEILUNGEN
MEHRERE KONTINUIERLICHE VERTEILUNGEN
BESTELLSTATISTIK
STOCHASTISCHE PROZESSE
PROBEN UND PERMUTATIONEN
DIENSTPROGRAMMFUNKTIONEN
LOW DISCREPANCY SEQUENCE
quelle