In [3]:
import numpy as np

In [4]:
def simulation(f, rounds):
    values = [
        f()
        for _ in xrange(rounds)
    ]
    return np.var(values)

In [5]:
def a():
    x = np.random.normal(size=50)
    y = np.random.normal(size=50)
    return np.mean(x) - np.mean(y)

In [6]:
simulation(a, 10000)


Out[6]:
0.040377318794359872

In [7]:
def b():
    x = np.random.choice(np.random.normal(size=100), 50, replace=False)
    y = np.random.choice(np.random.normal(size=100), 50, replace=False)
    return np.mean(x) - np.mean(y)

In [8]:
simulation(b, 10000)


Out[8]:
0.039048497384724296

In [9]:
def c():
    x = np.random.choice(np.random.normal(size=100), 50, replace=True)
    y = np.random.choice(np.random.normal(size=100), 50, replace=True)
    return np.mean(x) - np.mean(y)

In [10]:
simulation(c, 10000)


Out[10]:
0.059948939898851972

In [11]:
def d():
    p = np.random.normal(size=100)
    x = np.random.choice(p, 50, replace=False)
    y = np.random.choice(p, 50, replace=False)
    return np.mean(x) - np.mean(y)

In [12]:
simulation(d, 10000)


Out[12]:
0.019564752456811486

In [13]:
def e():
    p = np.random.normal(size=100)
    x = np.random.choice(p, 50, replace=True)
    y = np.random.choice(p, 50, replace=True)
    return np.mean(x) - np.mean(y)

In [15]:
simulation(e, 10000)


Out[15]:
0.039312577910830447