2020年7月11日土曜日

【標準ライブラリ】randomによる乱数生成

標準ライブラリrandomを用いると乱数が生成できる。様々な確率密度関数が用意されているが代表的なものについて説明する。

ライブラリrandomを使う際にはimportが必要。

import random




1. 一様な乱数を生成するrandom.random,random.uniform

random.randomは0.0以上1.0未満の浮動小数点乱数を生成する。引数は取らない。

import random
import matplotlib.pyplot as plt

x = []
for i in range(10000):
    x.append(random.random())

plt.hist(x,100)
plt.show()

実行結果



random.uniformは引数(a, b)を取り、a以上b以下またはb以上a以下の浮動小数点乱数を生成する。

import random
import matplotlib.pyplot as plt

x = []
for i in range(10000):
    x.append(random.uniform(100,200))

plt.hist(x,100)
plt.show()

実行結果




2. 正規分布乱数を生成するrandom.gauss

random.gaussは引数(mu, sigma)を取り、平均muと分散sigmaで求まる正規分布に応じた浮動小数点乱数を生成する。

import random
import matplotlib.pyplot as plt

x = []
for i in range(10000):
    x.append(random.gauss(5, 2))

plt.hist(x,100)
plt.show()

実行結果




3. ガンマ分布乱数を生成するrandom.gammavariate

random.gammavariateは引数(alpha, beta)を取り、形状母数alphaと尺度母数betaで求まる確率密度関数に応じたガウス分布を持つ浮動小数点乱数を生成する。alpha > 0, beta > 0 でなければならない。

alpha = 1, beta = 2 の場合

import random
import matplotlib.pyplot as plt

x = []
for i in range(10000):
    x.append(random.gammavariate(1, 2))

plt.hist(x,100)
plt.show()

実行結果




alpha = 3, beta = 2 の場合

import random
import matplotlib.pyplot as plt

x = []
for i in range(10000):
    x.append(random.gammavariate(3, 2))

plt.hist(x,100)
plt.show()

実行結果





4. 0~2πの範囲の乱数を生成するrandom.vonmisesvariate

random.vonmisesvariateはラジアンに相当する0~2πの範囲の乱数を生成しする。引数(mu, kappa)を指定する。muは平均、kappaは濃度パラメータで0以上でないといけない。kappaを0とした場合は0~2πの範囲で一様な分布となる。
mu = 3.14, kappa = 3 の場合。

import random
import matplotlib.pyplot as plt

x = []
for i in range(10000):
    x.append(random.vonmisesvariate(3.14, 3))

plt.hist(x,100)
plt.show()

実行結果



mu = 0, kappa = 0 の場合。

import random
import matplotlib.pyplot as plt

x = []
for i in range(10000):
    x.append(random.vonmisesvariate(0, 0))

plt.hist(x,100)
plt.show()

実行結果




5. 一様な整数乱数を生成するrandom.randrange,random.randint

random.randrangeは引数(start, stop, step)で指定した範囲の一様分布の整数乱数を生成する。stepは省略可能。またstopのみの指定も可能でその場合0からstopの一つ前の数までの範囲指定となる。
random.randintは引数(a, b)を指定しa以上b以下の範囲の一様分布の整数乱数を生成する。

random.randrangeでstop = 10のみ指定した場合

import random
import matplotlib.pyplot as plt

x = []
for i in range(10000):
    x.append(random.randrange(10))

plt.hist(x,100)
plt.show()

実行結果



random.randrangeでstart = 5, stop = 15, step = 3 を指定した場合。

import random
import matplotlib.pyplot as plt

x = []
for i in range(10000):
    x.append(random.randrange(5, 15, 3))

plt.hist(x,100)
plt.show()

実行結果



random.randintでa = -3, b = 3を指定した場合。

import random
import matplotlib.pyplot as plt

x = []
for i in range(10000):
    x.append(random.randint(-3, 3))

plt.hist(x,100)
plt.show()

実行結果




6. リファレンス

Python 標準ライブラリ > random --- 擬似乱数を生成する

使用バージョン:Python 3.7.0

0 件のコメント:

コメントを投稿