LoginSignup
14
6

More than 5 years have passed since last update.

Numpyの様々な乱数生成方法[正規分布、配列内から、二項分布に従って]

Last updated at Posted at 2018-04-05

この記事では様々な種類の乱数の生成方法を学びます.
また、ここでは、MatplotlibとNumpyを使用しますのでこれらをインストールしていない方は、
こちらの記事を参考にしてください←Anacondaからのインストールです.

今回説明する関数3つ

  1. numpy.random.randn()
    正規分布に従った乱数の生成

  2. numpy.random.choice()
    リスト型のデータの中からランダムに選んだ結果を渡した整数値の数だけ返します.

  3. numpy.random.binomial()
    二項分布に従う乱数

本題に入る前に~numpy.random.seed()について~

乱数を生成する前にnumpy.random.seed()を用いてシード値を固定することが出来ます.
シード を固定することでつねに 同じ乱数列 を生成することができます.同じ乱数列を使用することによって、同じ条件であれば乱数を用いていても同様の計算結果を再現できるようになります.

1. 正規分布に従った乱数の生成

numpy.random.randn()に整数を渡すと、 正規分布 に従う乱数を渡した値の数だけ返します.

example.py
import numpy as np #npをnumpyとして使用
import matplotlib.pyplot as plt #グラフ描写のために.pyplotをインポート

np.random.seed(0)#予めseed値を設定する

x = np.random.randn(10000)# 正規分布に従う乱数を10000個生成





#可視化
plt.hist(x, bins='auto')#xをヒストグラムにプロットする。ヒストグラムの本数は'auto'
plt.show()#グラフを表示
seed値を0にした時の結果
figure1.png

2. リスト(配列)からランダムに値を抽出

numpy.random.choice()にリスト型のデータxと整数値nを渡すと、渡したリスト型のデータの中からランダムに選んだ結果を渡した整数値の数だけ返します.

gatag-00010569.jpg

sample2.py
import numpy as np

x = ['One', 'Two', 'Three', 'Four', 'Five']
# xの中からランダムに5個選んでyに代入してください
y1 = np.random.choice(x,5)
y2 = np.random.choice(x,5)
print(y1)
print(y2)
result
['Five' 'One' 'Two' 'Two' 'Three']
['Four' 'One' 'Five' 'Five' 'Three']

seed値を固定していないので異なる結果が出てきます.


3. 二項分布に従う乱数を生成する

numpy.random.binomial()はある試行が成功かであるか失敗であるかのいずれかを返します.
例えば、コインを投げた時は必ず表か裏しか出ません.

そして、失敗も成功も確率は0.5です.numpy.random.binomial()に整数nと0以上1以下の実数pを渡すと、渡した整数nの回数だけ成功率pの試行を行い、成功する回数を返します。第3引数にsize=整数値を渡すと、n回試行したときの成功数を指定した整数値分だけ返します.
binomial.jpg

sample3.py
import numpy as np

np.random.seed(0)# シード値を設定
# 0.5の確率で成功する試行を100回行なったときの成功数を変数nums1に代入
nums1 = np.random.binomial(100,0.5)
# 0.3の確率で成功する試行を100回行なったときの成功数を5回分求めて変数nums2に代入
nums2 = np.random.binomial(100,0.3,size=5)
#nums1,nums2を出力
print(nums1)
print(nums2)

# 成功率の平均を出力
print(nums2.mean()/100)

nums2のように第三引数を用いると簡単に成功率の平均を.mean()メソッドを用いて計算できます.

result
52
[29 36 38 29 34]
0.332

ここで今回は終了です.この記事が参考になれば幸いです!

14
6
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
6