このページでは、NumPyのランダム配列生成方法をまとめていきます。
基本的にnumpy.random
のモジュールの中にある関数を使ってほとんどの乱数は生成できます。
一様な乱数を生成
一様乱数というのは、その範囲内においてある値が返される確率が全て均一な乱数のことです。
ここでは、rand
とrandint
について扱います。
rand
は[0, 1)(0以上1未満)の範囲で乱数を生成します。
もし[a, b)(a以上b未満)の範囲で乱数を生成したかったら、
でできます。
randint
は引数で指定された範囲(low, highにそれぞれ代入)における整数の乱数を返します。
生成した乱数を固定する。
seed
機能を使えば、生成した乱数を固定することができます。プログラムが正しく機能しているか確かめているときなどの、生成した乱数にも再現性が必要なときによく使われます。
リストからのランダムな抽出、リストのシャッフル
あらかじめ作られたリストからランダムに要素を抽出したり、リストに書かれているものの順番をランダムに入れ替えることについて扱っていきます。
ランダムに抽出する。
これには、choice
を使います。
この関数は、与えられたリストからランダムに要素を抽出できるだけでなく、その抽出の仕方に重みをつけたり、重複のあるなしを選択したりすることができます。
リストのシャッフル
shuffle
が使えるとよいでしょう。
ただ、リストの順番をランダムに入れ替えるだけです。
新しいリストが作成されるわけではなく、リストの中身が変更されるので、注意してください。
特定の確率分布に従った乱数の生成
統計学などでよく使われている正規分布や、二項分布に従う乱数を生成していきます。
正規分布に従った乱数の生成
正規分布は、
上記の確率密度関数 に従った分布のことをいいます。
*参考
アタリマエ! 正規分布とは何なのか?その基本的な性質と理解するコツをを書いていきます
この中で、特に となっているものを標準正規分布と呼びます。
標準正規分布を使いたい場合はrandn
を、他の正規分布が使いたいときはnormal
を使って引数でそれぞれ平均(loc)、標準偏差(scale)を指定して実行すれば求める分布になります。また、normal
のデフォルトの値は、標準正規分布のものになっているのでsizeで配列の形を指定してやれば、randn
と同じ使い方ができます。
二項分布に従った乱数の生成
これにはbinomial
を使います。
二項分布は
に従った分布のことをいいます。
がパラメータとなっており、統計学においてはそれぞれ、試行の回数、事象の起こる確率として設定されることが多いです。また、 は組み合わせの数を表しており、
で計算できます。
*参考
アタリマエ! コイン投げから分かる二項分布。正規分布やポアソン分布との関係性と近似について
引数は(n, p, size)となっており、sizeのデフォルト値がNoneとなっています。
ベータ分布に従った乱数の生成
これにはbeta
を使います。
ベータ分布は、
で表される確率密度関数に従った分布で、 の範囲は で与えらます。
*参考
コインで理解するベータ分布
ガンマ分布に従った乱数の生成
これにはgamma
を使います。
ガンマ分布とは、
で表されるに従った分布のことをいいます。
確率で起こる事象が回起こるまでの時間を表しています。
ここで用いられる はガンマ関数と呼ばれるものです。
*参考
高校数学の美しい物語 ガンマ関数の定義と性質
引数は(shape, scale, size) となっており、shapeは,scaleはに対応しています。sizeは例のごとく、返す配列の形を指定します。
ポアソン分布に従った乱数の生成
これにはpoisson
を使います。
ポアソン分布は、
に従った確率分布のことをいいます。これは、ある一定期間の間に平均回起こるような事象がその期間の中で回起こる確率を示しています。
*参考
高校数学の美しい物語 ポアソン分布の意味と平均・分散
この関数は、引数で と、sizeだけ指定します。
カイ二乗分布に従った乱数の生成
これにはchisquare
を使います。
カイ二乗分布というのは、標準正規分布に従った乱数の二乗をいくつか足したものをいいます。足していく個数というのは、自由度で決まります。
このの分布がカイ二乗分布になります。
少し説明が分かりにくいと思うので、分かりやすく紹介しているサイトのリンクをはっておきます。
*参考
χ2(カイ2乗)分布
【統計学】正規分布とカイ二乗分布の関係を可視化してみる。
ヒストグラムを使った分布の確認
生成した乱数が、自分のほしい分布に従っているか確認したいときは、matplotlibを使ってヒストグラムを出すとわかりやすいです。randn
が標準正規分布に従っているか、確かめてみます。
確認のため、標準正規分布に従った確率密度関数のグラフも一緒に確認してみます。
また、確率密度関数を記述する上で、numpyの関数を一部使用しています。これについての詳しい解説はまた別のページで行う予定です。
出力されたグラフはこんな感じになります。
きれいな形の標準正規分布になっていますね。