Numpyで乱数を発生させるにはnumpy.randomを使います.サイコロを振った時の目や,カードガチャで出現率をコントールしてカードを生成するプログラムを通してrandom関数を学んでいきましょう。
一様分布の乱数生成(実数)
numpy.random.rand(n) 0~1までの一様乱数をn個生成する.
例1.0~1までの乱数を生成させます.
[IN]1:
import numpy as np
a = np.random.rand() #0~1までの乱数を1個生成します.
b = np.random.rand(5) #0~1までの乱数を5個生成します.
print("乱数を1個生成",a)
print("乱数を5個生成",b)
[OUT]1:
乱数を1個生成 0.03978696144088634
乱数を5個生成 [0.63566701 0.63956323 0.10604531 0.98676647 0.42089613]
一様分布の乱数生成(整数)
numpy.random.randint(low,high,size) lowからhighまでの整数をsize個生成する.
例2.サイコロを6回振る
[IN]2:
import numpy as np
a=np.random.randint(1,7,6)
print(a)
[OUT]2:
[5 4 3 3 2 5]
今回はサイコロの3の目が重複して出現しました.
配列からランダムに抽出
numpy.random.choice(a, size, replace=True,p=none )
配列aをsize個抽出します.
replacedパラメータ(True:重複あり,False:重複なし)
pパラメータで配列の出現率を決める.(出現率の和は1である)
例3.数字が1から5まで書かれたカードを5回引く(重複なし)
[IN]3:
import numpy as np
a = list(range(1, 6))
b = np.random.choice(a, 5, replace=False)
print(b)
[OUT]3:
[4 3 5 2 1]
重複することなくカードが生成されたことがわかります.
例4.カードの出現確率が歪なカードガチャを乱数を使って作成していきます.
5種類のカードと出現確率は以下の通りです.10000回ガチャを引いた時の出現回数をグラフ表示してみましょう.
1.Low :38%
2.Midle :30%
3.High :20%
4.Ultra :8%
5.Lea :4%
[IN]4:
import numpy as np
from collections import Counter
import matplotlib.pyplot as plt
a = ["1.Low" ,"2.Midle" ,"3.High","4.Ultla","5.Lea"] #カード名
rate =[0.38, 0.30 , 0.20, 0.08, 0.04] #出現率
b = np.random.choice(a, 10000, p=rate)
b.sort() #リストの並びを昇降順にする
card=Counter(b) #リスト中の要素数を数える
print(Counter(b))
plt.bar(card.keys(), card.values()) #グラフを描く
plt.show()
[OUT]4:
Counter({'1.Low': 3719, '2.Midle': 3052, '3.High': 2042, '4.Ultla': 776, '5.Lea': 411})
カードが設定した出現確率に沿って生成されました.
スポンサーリンク
コメント