Saya punya algoritma MCMC tertentu yang ingin saya porting ke C / C ++. Sebagian besar perhitungan mahal dalam C sudah melalui Cython, tapi saya ingin agar seluruh sampler ditulis dalam bahasa yang dikompilasi sehingga saya bisa menulis pembungkus untuk Python / R / Matlab / apa pun.
Setelah menyodok sekitar saya condong ke C ++. Beberapa perpustakaan yang relevan yang saya tahu adalah Armadillo (http://arma.sourceforge.net/) dan Scythe (http://scythe.wustl.edu/). Keduanya mencoba meniru beberapa aspek R / Matlab untuk mempermudah kurva belajar, yang sangat saya sukai. Sabit kotak sedikit lebih baik dengan apa yang ingin saya lakukan saya pikir. Secara khusus, RNG-nya mencakup banyak distribusi di mana Armadillo hanya memiliki seragam / normal, yang tidak nyaman. Armadillo tampaknya sedang dalam pengembangan yang cukup aktif sementara Scythe melihat rilis terakhirnya pada tahun 2007.
Jadi yang saya ingin tahu adalah apakah ada yang punya pengalaman dengan perpustakaan ini - atau orang lain yang hampir pasti saya lewatkan - dan jika demikian, apakah ada sesuatu untuk merekomendasikan satu di atas yang lain untuk ahli statistik yang sangat akrab dengan Python / R / Matlab tetapi kurang begitu dengan bahasa yang dikompilasi (tidak sepenuhnya bodoh, tetapi tidak benar-benar mahir ...).
Saya akan sangat menyarankan agar Anda melihat
RCpp
danRcppArmadillo
paket untukR
. Pada dasarnya, Anda tidak perlu khawatir tentang pembungkus karena mereka sudah "disertakan". Selanjutnya gula sintaksis benar-benar manis (pun intended).Sebagai komentar sampingan, saya akan merekomendasikan agar Anda melihat
JAGS
, yang tidak MCMC dan kode sumbernya di C ++.sumber
Rcpp
denganRcppArmadillo
adalah cara untuk melakukannya. Sunting: Menggunakan Rcpp, Anda juga memiliki akses ke semua RNG yang ditanamkan dalam C-code yang mendasari R.Boost Random dari Boost C ++ library bisa sangat cocok untuk Anda. Selain banyak jenis RNG, ia menawarkan berbagai distribusi yang berbeda untuk diambil, seperti
Selain itu, Boost Math melengkapi distribusi di atas yang dapat Anda sampel dari dengan berbagai fungsi kepadatan dari banyak distribusi. Ini juga memiliki beberapa fungsi pembantu yang rapi; hanya untuk memberi Anda ide:
Jika Anda memutuskan untuk menggunakan Boost, Anda juga bisa menggunakan perpustakaan UBLAS-nya yang menampilkan berbagai jenis matriks dan operasi yang berbeda.
sumber
Ada banyak perpustakaan C / C ++ di luar sana, sebagian besar berfokus pada domain masalah tertentu (misalnya pemecah PDE). Ada dua perpustakaan komprehensif yang dapat saya pikirkan yang mungkin Anda temukan sangat berguna karena ditulis dalam C tetapi pembungkus Python yang sangat baik sudah ditulis.
1) IMSL C dan PyIMSL
2) trilinos dan pytrilinos
Saya tidak pernah menggunakan trilino karena fungsinya terutama pada metode analisis numerik, tetapi saya banyak menggunakan PyIMSL untuk pekerjaan statistik (dan dalam kehidupan kerja sebelumnya saya juga mengembangkan perangkat lunak).
Sehubungan dengan RNG, berikut adalah yang ada di C dan Python di IMSL
DISCRETE
DISTRIBUSI TERUS MENERUS
DISTRIBUSI BERGANDA BERGANDA
STATISTIK PESANAN
PROSES STOCHASTIC
SAMPEL DAN PERMUTASI
FUNGSI UTILITAS
URUTAN KECERDASAN RENDAH
sumber