this is a code for drawing a graph of binary probability distribution with matplotlib.
#!/usr/bin/env python #coding: utf-8 import pylab as pl def combination(n, r): if (r == 0) or (n == r): return 1.0 denom = reduce(lambda x, y: x*y, [i for i in range(1, n+1)]) mol_l = reduce(lambda x, y: x*y, [i for i in range(1, n-r+1)]) mol_r = reduce(lambda x, y: x*y, [i for i in range(1, r+1)]) return float(denom / (mol_l * mol_r)) def get_probability(p, n, r): q = 1 - p return combination(n, r) * (p ** r) * (q ** (n-r)) def plot_bin_distrib(p, n, lt, lab): xl = [nr for nr in range(0, n+1, 1)] yl = [get_probability(p, n, nr) for nr in range(0, n+1, 1)] pl.plot(xl, yl, lt, label=lab) def main(): p = 1.0/3.0 n = 10 plot_bin_distrib(p, n, 'b-', 'Bin(%s,%f)' %(n,p)) n = 20 plot_bin_distrib(p, n, 'r-', 'Bin(%s,%f)' %(n,p)) n = 30 plot_bin_distrib(p, n, 'g-', 'Bin(%s,%f)' %(n,p)) n = 40 plot_bin_distrib(p, n, 'y-', 'Bin(%s,%f)' %(n,p)) pl.ylabel('p(x)') pl.xlabel('x') pl.legend() pl.show() if __name__ == "__main__": main()
and here is output from above code.
No comments:
Post a Comment