[EMAIL PROTECTED] wrote: > I think is more easy explained as two linked markov chains. So given > one list the other can be generated.
'Given one list sounds' like an observation (and this sound like an order 2 hmm). But I'm not sure what exactly you want to do with your markov chain. Do you want the probability distribution at each time step or some value ? In this case, I'd do something like: #### hmm.py from random import random def St_given_St1_St2_Ot(St1,St2,Ot): p0=0.5*St1*St2+0.25*St1+0.125*St2+0.0625 return Ot and p0 or 1-p0 def decision(p): return (random()>p) and 1 or 0 def hmm(LO,LS): for ot in LO[2:]: p=St_given_St1_St2_Ot(LS[-1],LS[-2],ot) LS.append(decision(p)) return LS LO1=(-1,-1,1,0,0,0,1,1) LS1=[1,0] print ''.join(map(str,hmm(LO1,LS1))) LO2=(0,)*50 LS2=[1,1] print ''.join(map(str,hmm(LO2,LS2))) LO3=(1,)*50 LS3=[1,1] print ''.join(map(str,hmm(LO3,LS3))) #### Which gives hours of fun looking at random numbers: $ python hmm.py 10111101 11111111111111111111111111100000000000001000000000 11011011011011011011010110011011011011011010101101 $ python hmm.py 10101011 11111111111111111111111111111111000000000000000111 11011010011010100011010110110011001101101101011010 $ python hmm.py 10100011 11111111111111111111111111111111111111111111111111 11011010110011001101011011011101010110101101101011 $ python hmm.py 10111101 11101010000000000000000000000000000000000000000001 11011001101101011010110111010101010110110110011101 $ python hmm.py 10100011 11111111111111111111111111111111111111111111111111 11010110110110110011011010110011010011011011011010 $ Instead of generating the whole sequence, you can wrap it in an iterator. And the observations list can also be an iterator (generated with another chain if you like). HTH -- http://mail.python.org/mailman/listinfo/python-list