In [3]:
%autosave 2
from threading import Thread
import numpy as np
In [16]:
def f(x, a, b):
return a * x + b
n = 1000001
n_threads = 8
x = np.linspace(0, 1, n)
A = np.vstack((x, np.ones_like(x))).T
In [19]:
%%timeit
a_ = []
b_ = []
for _ in range(n_threads):
y = (f(x, np.pi, np.exp(1))
+ np.random.normal(scale=0.5, size=n))
a, b = np.linalg.lstsq(A, y)[0]
a_.append(a)
b_.append(b)
print(np.mean(a_), np.mean(b_))
In [26]:
%%timeit
a_ = []
b_ = []
def worker():
y = (f(x, np.pi, np.exp(1))
+ np.random.normal(scale=0.5, size=n))
a, b = np.linalg.lstsq(A, y)[0]
a_.append(a)
b_.append(b)
threads = []
for _ in range(n_threads):
t = Thread(target=worker)
t.start()
threads.append(t)
for t in threads:
t.join()
print(np.mean(a_), np.mean(b_))
In [29]:
%%timeit
for _ in range(n_threads):
y = np.random.normal(scale=0.5, size=n)
In [30]:
%%timeit
def worker():
y = np.random.normal(scale=0.5, size=n)
threads = []
for _ in range(n_threads):
t = Thread(target=worker)
t.start()
threads.append(t)
for t in threads:
t.join()
In [ ]: