PYTHON MEBY

Pythonで乱数を生成(random.random, random.randint, random.uniform, random.gauss, etc.)

この記事では、Pythonのrandomモジュールを使用して様々な乱数を生成する方法を解説します。random.random, random.randint, random.uniform, random.gaussなどの関数について、サンプルコード付きで説明します。

目次

random.random(): 0.0以上1.0未満の一様乱数

random.random()関数は、0.0以上1.0未満の一様乱数を生成します。引数は必要ありません。

import random
random_number = random.random()
print(random_number)

実行するたびに異なる乱数が生成されます。

random.randint(): 指定範囲の整数乱数

random.randint(a, b)関数は、a以上b以下の整数乱数を生成します。aとbは整数で、a <= bである必要があります。

import random
random_integer = random.randint(1, 10)
print(random_integer)

例では、1から10までのランダムな整数が生成されます。

random.uniform(): 指定範囲の実数乱数

random.uniform(a, b)関数は、a以上b以下の実数乱数を生成します。aとbは実数で、a <= bである必要があります。

import random
random_float = random.uniform(1.0, 10.0)
print(random_float)

例では、1.0から10.0までのランダムな実数が生成されます。

random.gauss(): 正規分布に従う乱数

random.gauss(mu, sigma)関数は、平均mu、標準偏差sigmaの正規分布に従う乱数を生成します。

import random
random_gauss = random.gauss(0, 1)
print(random_gauss)

例では、平均0、標準偏差1の正規分布からの乱数が生成されます。

random.choices(): 重み付き乱数

random.choices(population, weights=None, k=1)関数は、populationからk個の要素を、weightsで指定された重み付けでランダムに選択します。weightsがNoneの場合、一様分布で選択されます。

import random
population = ['A', 'B', 'C']
weights = [0.2, 0.5, 0.3]
random_choices = random.choices(population, weights=weights, k=2)
print(random_choices)

例では、'A'が20%、'B'が50%、'C'が30%の確率で選択されます。

random.shuffle(): リストの要素をシャッフル

random.shuffle(x)関数は、リストxの要素をインプレースでシャッフルします。

import random
my_list = [1, 2, 3, 4, 5]
random.shuffle(my_list)
print(my_list)

リストmy_listの要素の順番がランダムに変更されます。

random.sample(): リストから重複なしでランダムに要素を選択

random.sample(population, k)関数は、populationから重複なしでk個の要素をランダムに選択します。

import random
my_list = [1, 2, 3, 4, 5]
random_sample = random.sample(my_list, 3)
print(random_sample)

my_listから3つの要素が重複なしでランダムに選択されます。

シード値による乱数の制御

random.seed(a)関数は、乱数生成器のシード値を設定します。同じシード値を設定すると、同じ乱数列が生成されます。

import random
random.seed(10)
print(random.random())
random.seed(10)
print(random.random())

同じシード値10で2回実行すると、同じ乱数が生成されます。

乱数の利用例

乱数は、シミュレーション、ゲーム、データのランダムサンプリングなど、様々な場面で利用されます。

import random
# サイコロのシミュレーション
die_roll = random.randint(1, 6)
print(f"サイコロの出目は: {die_roll}")

# モンテカルロ法の例
# 円周率の近似計算
num_points = 100000
in_circle = 0
for _ in range(num_points):
    x = random.uniform(-1, 1)
    y = random.uniform(-1, 1)
    distance = x**2 + y**2
    if distance <= 1:
        in_circle += 1
pi_approx = 4 * in_circle / num_points
print(f"円周率の近似値: {pi_approx}")

この例では、サイコロのシミュレーションとモンテカルロ法による円周率の近似計算を示しています。

関連記事