def get_transitions(seq, alphabet, markov_order): """Computes transitions matrix""" transitions = [] motifs = list(permutations(alphabet, markov_order+1)) counts = dict(zip(motifs, [0]*len(motifs))) for i in range(len(seq)-markov_order): s = seq[i:i+markov_order+1] if all([i in alphabet for i in s]): counts[s] += 1 for motif in motifs: transitions.append(counts[motif]) transitions = list(utils.grouper(len(alphabet), transitions)) sums = list(map(sum, transitions)) for i in range(len(transitions)): if sums[i] != 0: transitions[i] = [transitions[i][j] / float(sums[i]) for j in range(len(transitions[i]))] else: transitions[i] = [0.] * len(transitions[i]) return transitions
def test_grouper(self): self.assertEqual( list(utils.grouper(3, 'ABCDEFG', 'x')), [('A', 'B', 'C'), ('D', 'E', 'F'), ('G', 'x', 'x')] )