「Python3」乱数生成randomモジュールの使用方法

random Python

randomモジュールとは?

randomモジュールを使用すると、乱数を生成することができます。Python標準ライブラリとなっているため、インストールする必要がありません。

randomモジュールの使用方法

random()

0.0以上1.0未満の浮動小数点数float型の乱数を生成します。

<ソースコード>
print(random.random())
<出力結果>
0.6702324707677322

uniform(a, b)

uniform(a, b)は、任意の範囲(a<=n<=bまたはb<=n<=a)の浮動小数点数float型の乱数を生成します。
a, bはfloat型

<ソースコード>
print(random.uniform(a=100, b=200))
<出力結果>
189.2019188267347

randrange(start, stop, step)

randrange(start, stop, step)は、range(start, stop, step)の要素からランダムに選ばれた要素(整数int型)を返します。

<ソースコード>
print(random.randrange(start=10, stop=20, step=2))
<出力結果>
12

randint(a, b)

randint(a, b)はa<=n<=bのランダムな整数intを返します。
*randrange(a, b+1)と等価

<ソースコード>
print(random.randint(a=50, b=100))
<出力結果>
55

seed(a)

乱数シードを固定することで、同じ値を返します。
aがNoneまたは省略した場合、現在のシステム時刻が使用されます。

<ソースコード>
random.seed(a=0)
print(random.random())
random.seed(a=0)
print(random.random())
<出力結果>
0.8444218515250481
0.8444218515250481

getstate()とsetstate(state)

getstateメソッドは、乱数生成器の現在の内部状態を記憶したオブジェクトを返します。
setstateメソッドは、乱数生成器の内部状態を復元します。

<ソースコード(内部状態を書き込み)>
path = "data.txt"
# 内部状態をtxtに書き込み
with open(path, mode='w') as f:
    # 乱数生成器の現在の内部状態を記憶したオブジェクトを返す
    t = random.getstate()
    f.write(str(t[0]))
    f.write("\n")
    f.write(str(t[1]))
    f.write("\n")
    f.write(str(t[2]))
<ソースコード(内部状態を読み込み)>
path = "data.txt"
# txtに保存した内部状態を読み込み
with open(path, mode='r') as f:
    s = f.read()
    s = s.split("\n")
    s[0] = int(s[0])
    s[1] = s[1].replace("(","")
    s[1] = s[1].replace(")","")
    s[1] = s[1].split(",")
    s[1] = tuple(int(i) for i in s[1])
    t = tuple(s)
    # 乱数生成器の内部状態を復元する
    random.setstate(state=t)

choice(seq)

seqからランダムに要素を1個返します。

<ソースコード>
data = [i for i in range(10)]
print(random.choice(seq=data))
<出力結果>
5

choices(population, k)

populationからランダムに要素をk個返します。

<ソースコード>
data = [i for i in range(10)]
print(random.choices(population=data, k=3))
<出力結果>
[1, 9, 7]

shuffle(x)

シーケンスをランダムに並び替えます。

<ソースコード>
data = [i for i in range(10)]
random.shuffle(x=data)
print(data)
<出力結果>
[2, 1, 3, 5, 7, 0, 9, 6, 8, 4]

sample(population, k)

元のシーケンスは変更せず、ランダムに並び替えた新たなシーケンスを生成します。

<ソースコード>
data = [i for i in range(10)]
sam = random.sample(population=data, k=len(data))
print(sam)
<出力結果>
[2, 5, 3, 4, 1, 8, 6, 9, 0, 7]

確率分布のメソッド

確率分布のメソッドを表にまとめます。

確率分布 メソッド
三角分布 random.triangular(low, high, mode)
ベータ分布 random.betavariate(alpha, beta)
指数分布 random.expovariate(lambd)
ガンマ分布 random.gammavariate(alpha, beta)
ガウス分布 random.gauss(mu, sigma)
対数正規分布 random.lognormvariate(mu, sigma)
正規分布 random.normalvariate(mu, sigma)
フォン・ミーゼス分布 random.vonmisesvariate(mu, kappa)
パレート分布 random.paretovariate(alpha)
ワイブル分布 random.weibullvariate(alpha, beta)

確率分布のグラフを表示

matplotlibというグラフを作成できるライブラリを使用して、簡単に確率分布のグラフを表示させてみます。
三角分布をグラフで表示させてみます。

<ソースコード>
import random
import matplotlib.pyplot as plt

l=[]
for i in range(100000):
    l.append(random.triangular(low=0, high=1, mode=0.3))

plt.hist(l, bins=100)
plt.show()
<出力結果>

triangular 三角分布
グラフを見ると、三角分布になっているのが分かります。

コメント

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