# [python] help!

Explore how the accuracy of your `monte_carlo_pi(N)` integration varies with N. To do this, you will call `monte_carlo_pi(N)` function 100 times for each of the following values of N [10, 20, 50, 100, 200, 500, 1000, 2000, 5000, 10000]. Then for each N value, calculate the average and standard deviations of your estimates.

Write a function `accuracy()` that does this work, and returns an array having one row for each N value, and three columns: the first containing the N value, the 2nd should contain the average of the 100 calculations and the 3rd is the standard deviation (ddof=1). This will function may take several seconds to execute. You might want to have it print out something periodically so that you know its still running (perhaps one line per N value). While you are developing and testing this, you may want to omit the largest couple of values of N.

My code for monte_carlo_pi(N) is as below:

``````import numpy as np

def monte_carlo_pi(N):
x = np.random.random(N)
y = np.random.random(N)
count = 0

for i in range(N):
if x[i]**2 + y[i]**2 < 1:
count += 1

ratio = (count/N)*4

return ratio
``````

And this is what I’ve done so far:

``````def accuracy():
#putting the N values into an array for easy manipulation:
N = np.array([10, 20, 50, 100, 200, 500, 1000, 2000, 5000, 10000])
#calling the function for each N value:
for n in N:
row = np.array([n])
#calling the function 100 times:
arr = np.array([])
for n in range(1,101):
monte = monte_carlo_pi(n)
arr = np.append(arr, monte) #storing the values into an array
mean = np.sum(arr) / 100
std = np.std(mean, ddof=1)
#appending the value into each row:
row = np.append(row, mean)
row = np.append(row, std)
#making a new array
N_arr = np.array([])
N_arr = np.append(N_arr, row)

return N_arr
``````