Content deleted Content added
Cleared up the variable names |
|||
Line 327:
We can write implementation like this:
<source lang="python">
def fwd_bkw(
fwd = []
f_prev = {}
# forward part of the algorithm
for i,
f_curr = {}
for st in states:
if i == 0:
# base case for the forward part
prev_f_sum =
else:
prev_f_sum = sum(f_prev[k]*
f_curr[st] =
fwd.append(f_curr)
f_prev = f_curr
p_fwd = sum(f_curr[k] *
bkw = []
b_prev = {}
# backward part of the algorithm
for i,
b_curr = {}
for st in states:
if i == 0:
# base case for backward part
b_curr[st] =
else:
b_curr[st] = sum(
bkw.insert(0,b_curr)
b_prev = b_curr
p_bkw = sum(
# merging the two parts
posterior = []
for i in range(
posterior.append({st: fwd[i][st] * bkw[i][st] / p_fwd for st in states})
assert p_fwd == p_bkw
return fwd, bkw, posterior
|