Pythonの初心者レッスンーーrandomモジュール

2024/06/27に公開

シーリズの目次

Pythonの初心者レッスンをここにまとめています。
https://zenn.dev/datasciencekun/articles/319e0f4b4021c5

Pythonのrandomモジュールは、乱数を生成するための機能を提供する標準ライブラリの一部です。このモジュールを使用すると、様々な種類の乱数を生成したり、シャッフルしたりすることができます。主な機能には以下のようなものがあります:

  • 擬似乱数の生成: 擬似乱数を生成するための関数が提供されています。これらの関数は、乱数生成器を使用して疑似乱数を生成します。具体的には、整数、浮動小数点数、ランダムな要素を持つシーケンスを生成する関数があります。
  • シャッフル: シーケンスの要素をランダムに並べ替える機能があります。リストやタプルなどのシーケンスをシャッフルすることができます。
  • ランダムな選択: シーケンスからランダムに要素を選択する関数があります。
  • 乱数シードの設定: 乱数生成器の初期状態を設定するための関数が提供されており、再現性のある乱数の生成が可能です。

例えば、以下のように使用します:

import random

# 0以上1未満の浮動小数点数を生成する
print(random.random())

# 1から10までの整数をランダムに生成する
print(random.randint(1, 10))

# リストの要素をランダムにシャッフルする
my_list = [1, 2, 3, 4, 5]
random.shuffle(my_list)
print(my_list)

randomモジュールのseed(シード)とは、乱数生成器が初期状態として使用する整数のことです。乱数生成器は実際には擬似乱数を生成しており、その生成方法にはアルゴリズムが使われています。このアルゴリズムは初期化時にシードという整数を必要とし、このシード値によって生成される乱数の系列が決定されます。
例えば、次のようにしてシード値を設定し、乱数系列を初期化します:

import random

# シード値を設定する
random.seed(42)

# 乱数を生成する
print(random.random())
print(random.randint(1, 10))

上記の例では、シード値として 42 を指定して乱数生成器を初期化しています。同じシード値を使って再度乱数生成器を初期化すると、同じ乱数系列が再現されます。

以下は、Pythonのrandomモジュールで提供されているすべての関数とその簡単な説明をテーブルで示したものです。

関数名 説明 使用例
random() 0以上1未満の浮動小数点数を返す random.random()
seed(a=None) 乱数生成器のシードを設定する random.seed(42)
randrange(stop) 0から stop 未満の整数をランダムに返す random.randrange(10)
randrange(start, stop) start から stop 未満の整数をランダムに返す random.randrange(1, 10)
randrange(start, stop, step) start から stop 未満の整数を step 刻みでランダムに返す random.randrange(0, 100, 10)
randint(a, b) aからbまで(両端を含む)の整数をランダムに返す random.randint(1, 100)
choice(seq) シーケンスからランダムに要素を選んで返す random.choice(['apple', 'banana', 'cherry'])
choices(population, weights=None, *, cum_weights=None, k=1) population からランダムに k 個の要素を選んで返す random.choices(['apple', 'banana', 'cherry'], k=2)
shuffle(x) シーケンスの要素をランダムにシャッフルする my_list = [1, 2, 3]; random.shuffle(my_list)
sample(population, k) population から重複なしで k 個の要素を選んで返す random.sample(range(100), 10)
random_sample() 0以上1未満の浮動小数点数を返す random.random_sample()
random_uniform(a, b) aからbまでの範囲の浮動小数点数を返す random.uniform(1.0, 10.0)
random_integers(a, b) aからbまでの範囲の整数を返す random.random_integers(1, 100)
random_normal(mu, sigma) 平均 mu と標準偏差 sigma の正規分布から乱数を生成する random.random_normal(0.0, 1.0)
random_lognormal(mu, sigma) 平均 mu と標準偏差 sigma の対数正規分布から乱数を生成する random.random_lognormal(0.0, 1.0)
random_gammavariate(alpha, beta) ガンマ分布から乱数を生成する random.random_gammavariate(1.0, 2.0)
random_betavariate(alpha, beta) ベータ分布から乱数を生成する random.random_betavariate(0.5, 0.5)
random_expovariate(lambd) 指数分布から乱数を生成する random.random_expovariate(0.5)
random_gauss(mu, sigma) 平均 mu と標準偏差 sigma のガウス分布から乱数を生成する random.random_gauss(0.0, 1.0)
random_triangular(low, high, mode) 三角分布から乱数を生成する random.random_triangular(0.0, 1.0, 0.5)
random_uniform() 0以上1未満の範囲の浮動小数点数を返す random.random_uniform()
getstate() 乱数生成器の内部状態を返す random.getstate()
setstate(state) 乱数生成器の内部状態を設定する random.setstate(state)

Discussion