def test_backward_with_hmmlearn(self): r = np.random.randn obs = [np.array([[-600 + r(), 100 + r()], [-300 + r(), 200 + r()], [0 + r(), 300 + r()]]) for _ in xrange(10)] hmm = GaussianHMM(n_components=3) hmm.fit(obs) # Calculcate bwdlattice using hmmlearn algorithm framelogprob = hmm._compute_log_likelihood(obs[0]) start = timeit.default_timer() bwdlattice1 = hmm._do_backward_pass(framelogprob) print('hmmlearn took %fs' % (timeit.default_timer() - start)) # Calculate bwdlattice using fhmm algorithm with #chains = 1. This should yield the exact same results start = timeit.default_timer() bwdlattice2 = np.zeros(bwdlattice1.shape) fhmmc._backward(obs[0].shape[0], 1, hmm.n_components, [(x,) for x in xrange(hmm.n_components)], hmm._log_startprob.reshape(1, 3), hmm._log_transmat.reshape(1, 3, 3), framelogprob, bwdlattice2) print('fhmm took %fs' % (timeit.default_timer() - start)) self.assertTrue(np.allclose(bwdlattice1, bwdlattice2))