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.randint(): 指定範囲の整数乱数
- random.uniform(): 指定範囲の実数乱数
- random.gauss(): 正規分布に従う乱数
- random.choices(): 重み付き乱数
- random.shuffle(): リストの要素をシャッフル
- random.sample(): リストから重複なしでランダムに要素を選択
- シード値による乱数の制御
- 乱数の利用例
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}")
この例では、サイコロのシミュレーションとモンテカルロ法による円周率の近似計算を示しています。