初学者Python蒙特卡洛模拟

Soo*_*kie 3 python montecarlo

我是Python的初学者,正在通过我们的讲师进行练习。我正在为这个问题而苦苦挣扎。

在Python编辑器中,编写一个Monte Carlo模拟以估计数字的值。具体来说,请按照以下步骤操作:A.产生两个数组,一个称为x,一个称为y,每个数组包含100个元素,它们在-1和1之间随机且均匀地分布于实数中。情节。相应地标记轴。C.写下一个数学表达式,该数学表达式定义哪些(x,y)对数据点位于以图的(0,0)为原点,半径为1的圆中。D.使用布尔蒙版来标识圆内的点,并以不同的颜色和标记大小在已在B中绘制的数据点之上对其进行过度绘制。

这就是我目前所拥有的。

import numpy as np
import math
import matplotlib.pyplot as plt
np.random.seed(12345)
x = np.random.uniform(-1,1,100) 
y = np.random.uniform(-1,1,100) 
plt.plot(x,y) //this works


for i in x:
    newarray = (1>math.sqrt(y[i]*y[i] + x[i]*x[i]))
plt.plot(newarray)
Run Code Online (Sandbox Code Playgroud)

有什么建议么?

Ale*_*ati 5

如注释中指出的,代码中的错误for i in x应为for i in xrange(len(x))

如果您想按照声明中的说明实际使用布尔掩码,则可以执行以下操作

    import pandas as pd
    allpoints = pd.DataFrame({'x':x, 'y':y})

    # this is your boolean mask
    mask = pow(allpoints.x, 2) + pow(allpoints.y, 2) < 1
    circlepoints = allpoints[mask]

    plt.scatter(allpoints.x, allpoints.y)
    plt.scatter(circlepoints.x, circlepoints.y)
Run Code Online (Sandbox Code Playgroud)

将点的数量增加到10000,您将获得类似这样的信息 散点图

估计PI可以使用著名的montecarlo推导

    >>> n = 10000
    >>> ( len(circlepoints) * 4 ) / float(n)
    <<< 3.1464
Run Code Online (Sandbox Code Playgroud)