背景
numpy.random.poission を C/C++ で実装したい.
C++11 であれば標準で poisson 分布が使えるが, 多少再現性が変わってもいいので, 並列で高速に計算したいとかで自前実装がほしい.
実装
random/src/mtrand.pyx
にインターフェイスがあります.
実際の実装(random_poisson
)は random/src/distributions/distributions.c
にあります.
The transformed rejection method for generating Poisson random variables (1993)
と古い文献を参考に実装してあります(マジックナンバーたくさんでわけわからぬ)
ちなみに libcxx の poisson 実装もマジックナンバーだらけです(かつコメントがまったくないのでなにを参考に実装してあるかわからぬ)
gnustl もよくわからぬ実装ですが, 一応参考文献のコメントがあります.
Non-Uniform Random Variates Generation(1986 と古い)
さらなる高みへ(高速生成)
cuRand や rocRAND が参考になるかも(rocRAND はソースコード公開)