问题重现:
# -*- coding: utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
# @Author: appleyuchi
# @Date: 2018-12-31 16:11:34
# @Last Modified by: appleyuchi
# @Last Modified time: 2018-12-31 16:54:56
import numpy as np
from hmmlearn import hmm
states = ["box 1", "box 2", "box3"]
n_states = len(states)
observations = ["red", "white"]
n_observations = len(observations)
start_probability = np.array([0.2, 0.4, 0.4])
transition_probability = np.array([
[0.5, 0.2, 0.3],
[0.3, 0.5, 0.2],
[0.2, 0.3, 0.5]
])
emission_probability = np.array([
[0.5, 0.5],
[0.4, 0.6],
[0.7, 0.3]
])
model = hmm.MultinomialHMM(n_components=n_states)
model.startprob_=start_probability
model.transmat_=transition_probability
model.emissionprob_=emission_probability
seen = np.array([[0,1,0]]).T
logprob, box = model.decode(seen, algorithm="viterbi")
# print "observations=",observations
print "seen=",seen
# TypeError: only integer scalar arrays can be converted to a scalar index
print("The ball picked:", ", ".join(map(lambda x: observations[x], seen)))
print("The hidden box", ", ".join(map(lambda x: states[x], box)))
解决方案:
print("The ball picked:", ", ".join(map(lambda x: observations[x], seen)))
改为:
print("The ball picked:", ", ".join(map(lambda x: observations[x], seen[0])))