%matplotlib inline import matplotlib.pyplot as plt import numpy as np def discrete_prob(d): r = np.random.random() sum = 0 for k in d: sum += d[k] if r < sum: return k weather = {"Sunny":0.62, "Rainy":0.38} for i in range(10): print discrete_prob(weather) weather2 = {"Sunny":{"Sunny":0.8, "Rainy":0.2}, "Rainy":{"Sunny":0.4, "Rainy":0.6}} seq = ["Sunny"] for i in range(10): seq.append(discrete_prob(weather2[seq[-1]])) seq fin = open("conway_weather.txt") cw = [] for line in fin: cw.append(line.strip()) mc = {} for i in range(1, len(cw)): p = cw[i - 1] if p not in mc: mc[p] = {} mc[p][cw[i]] = mc[p].get(cw[i], 0) + 1 for k in mc: sum = 0 for k2 in mc[k]: sum += mc[k][k2] for k2 in mc[k]: mc[k][k2] /= float(sum) mc seq = ["clear"] for i in range(100): seq.append(discrete_prob(mc[seq[-1]])) seq weighted = {"T":{"T":0.55,"H":0.45}, "H":{"T":0.45, "H":0.55}} seq = ["T"] for i in range(1000): seq.append(discrete_prob(weighted[seq[-1]])) len(seq) rc = 0.5 ** len(seq) rc prob = 1 for i in range(1, len(seq)): prob *= weighted[seq[i - 1]][seq[i]] prob prob / rc