Вы близки к решению.Я немного изменил ваш MCVE:
import numpy as np
import math
import matplotlib.pyplot as plt
np.random.seed(12345)
N = 10000
x = np.random.uniform(-1, 1, N)
y = np.random.uniform(-1, 1, N)
Теперь мы вычисляем критерий, который имеет смысл в этом контексте, например, расстояние от точек до начала координат:
d = x**2 + y**2
Затем мы используем Булево индексирование для различения точек внутри и за пределами Единичного круга:
q = (d <= 1)
На данный момент лежит гипотеза Монте-Карло.Мы предполагаем, что соотношение равномерно распределенных точек в круге и в плоскости U(-1,1)xU(-1,1)
является репрезентативным для площади единичного круга и квадрата.Тогда мы можем статистически оценить pi = 4*(Ac/As)
из соотношения точек внутри круга / квадрата.Это приводит к:
pi = 4*q.sum()/q.size # 3.1464
Наконец, мы строим график результата:
fig, axe = plt.subplots()
axe.plot(x[q], y[q], '.', color='green', label=r'$d \leq 1$')
axe.plot(x[~q], y[~q], '.', color='red', label=r'$d > 1$')
axe.set_aspect('equal')
axe.set_title(r'Monte Carlo: $\pi$ Estimation')
axe.set_xlabel('$x$')
axe.set_ylabel('$y$')
axe.legend(bbox_to_anchor=(1, 1), loc='upper left')
fig.savefig('MonteCarlo.png', dpi=120)
Это выводит:
![enter image description here](https://i.stack.imgur.com/mV1is.png)