▶ Numpyの基本を解説しています。過去の記事はこちらからどうぞ。
はじめに
今回は(疑似)乱数の生成について基本から解説します。Numpyを使った(疑似)乱数の生成ではrandomというモジュールを使います。このモジュールの中には乱数を生成するいろんな関数が提要されています。順にみていきましょう。
乱数を生成する
np.random.rand()
まずは0以上1未満の値を返すrand()です。
d1,d2,..はディメンジョンです。d0,d1,…を省略すると1つの乱数のみを返します。見ていきましょう。
# 1つの乱数を生成
np.random.rand()
これは毎回、実行のたびに異なる値が取得されます。再現性を持たせるために値を固定したければseedを指定します。次のようにすると、毎回同じ値が返ってくるようになります。
# seedを固定して1つの乱数を生成
np.random.seed(1)
np.random.rand()
次にd0,d1を指定してみましょう。
# 2次元の配列で乱数を生成
np.random.rand(3,4)
d0=3,d1=4を指定したので3行4列の乱数が生成されます。
np.random.randint()
指定した最小値以上、最大値未満の範囲で整数を返すのがrandint()です。
docstringを見ると、sizeはinteger あるいは、tupleが指定できるようです。試してみましょう。
# 5以上10未満の数字を10個取得
np.random.randint(5,10,10)
sizeにintegerを指定した場合は、その個数だけ乱数を取得できます。今回はlow=5, high=10, size=10なので5以上10未満の整数が10個得られます。
次にsizeにtupleを指定した場合を見てみましょう。
# 3行4列で10以上100未満の数字で構成された行列を作成
np.random.randint(10,100,(3,4))
sizeにtupleを指定した場合は、指定した形状の行列が作られます。
np.random.randn()
次に標準正規分布から値を取ってくる場合はrandom.randn()を使います。
平均0, 分散1の標準正規分布から値を取ってきます。試してみましょう。
# ライブラリのインポート
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
# 乱数を1000個生成
list=[]
for _ in range(1000):
list.append(np.random.randn())
# ヒストグラムの描画
plt.figure(figsize=(6,3))
plt.hist(list)
plt.title('標準正規分布から取得した値のヒストグラム')
plt.grid()
np.random.normal()
標準正規分布ではなく、任意の平均値・標準偏差の正規分布から値を生成する場合はnp.random.normal()を使います。
docstringを見てみましょう。
locが平均値、scaleが標準偏差になります。defaultの値がそれぞれ0と1に設定されているので、loc, scaleを与えなければ標準正規分布から値を取ってきます。sizeはintegerあるいはtupleとありますね。やってみましょう。
# 平均2, 標準偏差3の正規分布から値を20個の値を取得
np.random.normal(loc=2, scale=3, size=20)
sizeにintegerを与えた場合はその個数の値を生成します。sizeにtupleを与えてみましょう。
# 平均2, 標準偏差3の正規分布から値を取得して5行4列の行列を生成
np.random.normal(loc=2, scale=3, size=(5,4))
np.random.choice()
最後に指定したndarrayやリストからランダムに値を取ってくる
docstringをみると、aはndarrayやリスト、またはinteger、sizeはintegerあるいはtupleです。やってみましょう。
# aにintegerを指定
np.random.choice(10,size=5)
aにintegerを指定した場合です。この場合、np.arange(a)から値を取ってきます。今回はsizeに5を指定しているのでnp.range(10)から5つ値を取得します。
次にaにndarrayを指定してみましょう。
sample_array = np.array([1,2,3,4,5])
# ndarrayからランダムに値を取得
np.random.choice(sample_array,10)
このように指定したndarrayからランダムに値を取得することができます。size=10としているので値を10個取得しています。sizeにはtupleも指定できます。
# ndarrayからランダムに値を取得して3行4列の行列を作成
np.random.choice(sample_array,(3,4))
sizeの部分をtupleで指定するのはこれまでにも出てきましたね。指定した形状の行列を作ることができます。
まとめ
今回はNumpyで疑似乱数を生成する方法を扱いました。Numpyで乱数を扱う場合はrandomモジュールを利用します。以下にまとめておきます。
コメント