Numpy入門 乱数その2

前回から引き続きnumpyのrandomモジュールについてです。今回はTipsです。

choice ランダムな要素選択

choiceメソッドを使用すると、リスト、タプルのようなシーケンシャルオブジェクトからランダムに要素を選択することができます。

引数に対象のリストを指定しますが、それ以外に第2引数で選択する要素数、キーワード引数pで確率ウェイトをリストで指定することができます。

import numpy as np

menu = ['カレー', 'チャーハン', '焼きそば', 'グラタン', '肉じゃが']

# ランダムで一つ要素を選択する
np.random.choice(menu)
# 'チャーハン'

# ランダムで3つ要素を選択する
np.random.choice(menu, 3)
# array(['カレー', '焼きそば', 'グラタン'], dtype='<U5')

# 1/2の確率でカレーが食べたい
np.random.choice(menu, p=[1/2, 1/8, 1/8, 1/8, 1/8])
# 

seed シードの設定

擬似乱数ジェネレータのシードをseedメソッドを使用して設定することができます。
シードに指定できる値はNone(デフォルト)、0 〜 (2^32) - 1の整数、それらの整数の配列を指定することができます。Noneの場合は処理系により異なりますが、/dev/urandomやクロックを元にした値が設定されます。

単体テストなどで毎回同じ乱数を生成する必要がある場合に使用することが多いかと思いますが、その場合は適当な整数を設定しましょう。

import numpy as np

# シードを設定後、乱数を3回生成する
np.random.seed(100)

np.random.rand()
# 0.5434049417909654

np.random.rand()
# 0.27836938509379616

np.random.rand()
# 0.4245175907491331

# 再度シードを設定後、乱数を3回生成する
np.random.seed(100)

np.random.rand()
# 0.5434049417909654

np.random.rand()
# 0.27836938509379616

np.random.rand()
# 0.4245175907491331
#

上のサンプルではシードに100を設定後、乱数を3回生成しています。その後、再度シードを設定して3回生成していますが、3回とも前回生成した乱数と同じものが取得できていることが確認できます。