def entropy(data): if len(data) > 1: lvls = levels(data) n = float(sum(lvls[0])) h = -sum(hlog(float(value)/n) for value in lvls[0] ) else: h = 0. return h
def relentropy(data1,data2): ''' relative entropy of data2 given data1 ''' pairs = zip(data1,data2) levels1 = levels(data1) n1 = float(sum(levels1[0])) h=[] for b, lev in zip(levels1[0],levels1[1]): p = float(b)/n1 hx = entropy( [ x[1] for x in pairs if x[0] == lev] ) h.append( hx*p ) return sum(h)