Pythonでは、リストからランダムに要素を選択することが可能です。しかし、単純にランダムに選択するだけでなく、各要素が選ばれる確率を制御したい場合もあります。これは「重み付きランダム選択」と呼ばれ、特定の要素が他の要素よりも高い確率で選ばれるようにすることができます。
Pythonで重み付きランダム選択を行うためには、random.choices()
関数を使用します。この関数は、元となるシーケンス(リストなど)からランダムに要素を選択します。さらに、各要素が選ばれる確率を指定するためのweights
パラメータを提供します。
以下に、random.choices()
関数を使用して重み付きランダム選択を行う基本的なコードを示します。
import random
# 1~6の目が出るサイコロ(dice)を用意
dice = list(range(1,7))
# 6の目が出やすいように重みを設定する
weights = [1, 1, 1, 1, 1, 2]
# 歪んだサイコロを1000回振ってサンプルを得る
samples = random.choices(dice, k=1000, weights=weights)
# 結果の確認
for i in dice:
print(i, ':', samples.count(i))
このコードでは、1から6までの数字が入ったリスト(サイコロ)を作成し、6の目が他の目よりも2倍出やすいように重みを設定しています。その後、この歪んだサイコロを1000回振り、各目が何回出たかをカウントしています。
このように、Pythonのrandom.choices()
関数を使用すると、重み付きランダム選択を簡単に実装することができます。これにより、確率的な偏りを持つランダムな選択をプログラムに組み込むことが可能になります。.