始める無料で始める

誤った入力分布

この演習では、円周率の例を引き続き使います。 A graph of a circle inside a square with randomly sampled points

入力の確率分布を連続一様分布(random.uniform())から離散一様分布(random.randint())に変えたらどうなるでしょうか? 結果は信頼できなくなります。random.randint() は離散的な整数をサンプリングするのに対し、random.uniform() は連続的な浮動小数点数をサンプリングするからです。

このシミュレーションが出力する推定された円周率の値に注目してください。誤った確率分布を選んでいるため、精度は高くありません。Monte Carlo シミュレーションでは正しい確率分布を選ぶことが不可欠です。以降のレッスンでさまざまな分布について詳しく説明し、今後は自信を持って適切な分布を選べるようにしていきます。

random はすでにインポート済みです。

この演習はコースの一部です

Pythonで学ぶモンテカルロ・シミュレーション

コースを見る

演習の手順

  • 動画で使用した正しい random.uniform() ではなく、random.randint() を使って、xy の座標を -1 から 1 の区間でサンプリングしてください。

実践的なインタラクティブ演習

このサンプルコードを完成させて、この演習に挑戦してみましょう。

n = 10000
circle_points = 0 
square_points = 0 
for i in range(n):
    # Sample the x and y coordinates from -1 to 1 using random.randint()
    x = ____
    y = ____
    dist_from_origin = x**2 + y**2
    if dist_from_origin <= 1:
        circle_points += 1
    square_points += 1
pi = 4 * circle_points / square_points
print(pi)
コードを編集して実行