Numpyのrandomによる乱数生成

Numpy

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})

カードが設定した出現確率に沿って生成されました.

トップページへ戻る

 スポンサーリンク

コメント

タイトルとURLをコピーしました