Skip to content

Commit 658b1a8

Browse files
author
Thanh Chung
committed
add pi_calc with Ray
1 parent 98ef20d commit 658b1a8

File tree

1 file changed

+36
-0
lines changed

1 file changed

+36
-0
lines changed

tutorial/pi_ray/pi_calc_with_ray.py

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import numpy as np
2+
import math, statistics, time
3+
import ray
4+
5+
num_workers = 4
6+
trials = 20
7+
8+
ray.init(ignore_reinit_error=True)
9+
10+
def estimate_pi(num_samples):
11+
xs = np.random.uniform(low=-1.0, high=1.0, size=num_samples)
12+
ys = np.random.uniform(low=-1.0, high=1.0, size=num_samples)
13+
xys = np.stack((xs, ys), axis=-1)
14+
inside = xs*xs + ys*ys <= 1.0
15+
xys_inside = xys[inside]
16+
in_circle = xys_inside
17+
approx_pi = 4.0 * in_circle / num_samples
18+
return approx_pi
19+
20+
Ns = [10000, 50000, 100000, 500000, 1000000] #, 5000000, 10000000] # Larger values take a long time on small VMs and machines!
21+
maxN = Ns[-1]
22+
23+
fmt = '{:10.5f} seconds: pi ~ {:7.6f}, stddev = {:5.4f}, error = {:5.4f}%'
24+
def try_it(n, trials):
25+
print('trials = {:3d}, N = {:s}: '.format(trials, str_large_n(n, padding=12)), end='') # str_large_n imported above.
26+
start = time.time()
27+
pis = [estimate_pi(n) for _ in range(trials)]
28+
approx_pi = statistics.mean(pis)
29+
stdev = statistics.stdev(pis)
30+
duration = time.time() - start
31+
error = (100.0*abs(approx_pi-np.pi)/np.pi)
32+
print(fmt.format(duration, approx_pi, stdev, error)) # str_large_n imported above.
33+
return trials, n, duration, approx_pi, stdev, error
34+
35+
data_ns = [try_it(n, trials) for n in Ns]
36+
data_trials = [try_it(maxN, trials) for trials in range(5,20,2)]

0 commit comments

Comments
 (0)