誤った入力分布
この演習では、円周率の例を引き続き使います。

入力の確率分布を連続一様分布(random.uniform())から離散一様分布(random.randint())に変えたらどうなるでしょうか? 結果は信頼できなくなります。random.randint() は離散的な整数をサンプリングするのに対し、random.uniform() は連続的な浮動小数点数をサンプリングするからです。
このシミュレーションが出力する推定された円周率の値に注目してください。誤った確率分布を選んでいるため、精度は高くありません。Monte Carlo シミュレーションでは正しい確率分布を選ぶことが不可欠です。以降のレッスンでさまざまな分布について詳しく説明し、今後は自信を持って適切な分布を選べるようにしていきます。
random はすでにインポート済みです。
この演習はコースの一部です
Pythonで学ぶモンテカルロ・シミュレーション
演習の手順
- 動画で使用した正しい
random.uniform()ではなく、random.randint()を使って、xとyの座標を -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)