In [21]:
import numpy as np
import scipy.stats as stats
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline

In [66]:
-np.log2(1/500.0)


Out[66]:
8.965784284662087

In [92]:
def shannon_simulation(sample):
    shannon = stats.entropy(sample, base=2)    
    # plot
    sns.distplot(shannon)
    size = sample.shape[0]
    sims = sample.shape[1]
    plt.title('Distribution of {size}-component'.format(size=size)+
              ' Shannon Entropies\n '+
          'Randomly sampled from uniform distributions'+
             '\n {sim:.1e} simulations'.format(sim=sim))
    plt.xlabel('shannon entropy')
    plt.show()
    return shannon

sims=int(1e6)
size=15
sample = np.random.uniform(size=[size, sims])
print sample.shape
ent = stats.entropy(sample)
print ent.shape
shannon_vals = shannon_simulation(sample)


(15, 1000000)
(1000000,)

In [72]:
-np.log(1/500.0)


Out[72]:
6.2146080984221914

In [60]:
def plot_shannon_dist(shannon_vals, size, sim):
    sns.distplot(shannon_vals)
    plt.title('Distribution of {size}-component'.format(size=size)+
              ' Shannon Entropies\n '+
          'Randomly sampled from uniform distributions'+
             '\n {sim:.1e} simulations'.format(sim=sim))
    plt.xlabel('shannon entropy')
    plt.show()
    
plot_shannon_dist(shannon_vals, size=3, sim=10000)
sns.distplot(shannon_vals)


Out[60]:
<matplotlib.axes._subplots.AxesSubplot at 0x7ff2f8c30410>

In [67]:
sim = int(1e3)
for i in np.arange(3, 100, 10):
    shannon_vals = shannon_simulation(size=i, sims=sim)
    plot_shannon_dist(shannon_vals, sim=sim, size=i)



In [68]:
sim = int(1e5)
size = 500
sh = shannon_simulation(sims=sim, size=size)


---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-68-07b6327f377d> in <module>()
      2 size = 500
      3 sh = shannon_simulation(sims=sim, size=size)
----> 4 plot_shannon_dist(sh, sim)

TypeError: plot_shannon_dist() takes exactly 3 arguments (2 given)

In [70]:
plot_shannon_dist(sh, sim=sim, size=size)