In [1]:
import numpy as np

In [131]:
bin_count = 50
bins = np.array([0]*bin_count)

bins[5] += 10
bins[6] += 1


bins[46] += 1

bin_values = np.array([i for i in range(0,bin_count)])

In [132]:
possibility_distribution = [(bin_values*np.random.dirichlet(bins, bins.sum())/bins.sum()).sum() for i in range(5000)]

In [133]:
%matplotlib inline
import matplotlib.pyplot as plt

plt.xlim(0,bin_count)
plt.hist(possibility_distribution, bins=50)
''


Out[133]:
''

In [13]:
(bin_values*np.random.dirichlet(bins, 2)).mean()


Out[13]:
0.11303761322863445

In [54]:
bins = np.array([1]*20)
bins[10] += 1
bins[15] += 1
observations = 1

np.random.dirichlet(bins, 1)


Out[54]:
array([[ 0.17338139,  0.03455451,  0.02325679,  0.02124659,  0.02573916,
         0.14553389,  0.00479338,  0.04005475,  0.04634759,  0.01063245,
         0.10830318,  0.03707728,  0.03097544,  0.0554245 ,  0.00107638,
         0.11514135,  0.01751338,  0.05830946,  0.02503389,  0.02560464]])

In [30]:
(bin_values*np.random.dirichlet(bins, 2)/2.0).sum()


Out[30]:
12.944118435272863

In [20]:
np.random.multinomial?

In [53]:
np.random.dirichlet?

In [157]:
def custom_dirichlet(observations):
  total_observations = len(observations) + observations.sum()
  sample = np.array([np.random.beta(1+obs, 1+total_observations-obs) for obs in observations])
  return sample

In [176]:
bins = np.array([0]*40)
bins[10] += 10

bin_values = np.array([i for i in range(0,len(bins))])
possibility_distribution = [(bin_values*custom_dirichlet(bins)).sum() for i in range(5000)]

plt.xlim(0,bin_count)
plt.hist(possibility_distribution, bins=50)
''


Out[176]:
''

In [151]:
%matplotlib inline
import matplotlib.pyplot as plt

plt.xlim(0,bin_count)
plt.hist(possibility_distribution, bins=50)


Out[151]:
0.0009800877807168468

In [ ]: