🦀

Rustで正規分布からサンプリングする

2022/01/03に公開

Rustの乱数ライブラリであるrandで正規分布を作る方法が変わっていたのでメモを兼ねて書いておく。

サンプリングするコード

rand_distrを利用する必要がある。

use rand::prelude::{Distribution, thread_rng};
use rand_distr::Normal;

fn main() {
    let mut rng = thread_rng();
    
    let dist = Normal::<f64>::new(20.0, 5.0).unwrap();
    
    for i in 0..10 {
        println!("{}", dist.sample(&mut rng));
    }
}

https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=f7d76178cc0bb6017ac26a07e1c3a4b0

どのように変わったのか

昔はrand::distributions以下に配置されていたので以下のように利用できた。

use rand::prelude::{Distribution, thread_rng};
use rand::distributions::Normal;

fn main() {
    let mut rng = thread_rng();
    
    let dist = Normal::<f64>::new(20.0, 5.0).unwrap();
    
    for i in 0..10 {
        println!("{}", dist.sample(&mut rng));
    }
}

ちなみに

rand_distrにはかなり多くの分布が実装されているので使ってみてください。

Discussion