使用13种状态的Markov链图生成IndexError:列表索引超出范围

时间:2018-08-01 09:48:38

标签: python markov-chains

您好,我正在尝试使用pydot绘制markov链,但是我收到此错误,代码是从git-hub提取的,并执行了所有步骤,但是在使用pos = nx.drawing.nx_pydot时不起作用。 graphviz_layout(G,prog ='dot')

代码是:

    import numpy as np
import pandas as pd
import networkx as nx
import matplotlib.pyplot as plt
#%matplotlib inline
import os     
os.environ["PATH"] += os.pathsep + 'C:/Program Files (x86)/Graphviz2.38/bin/'

# create state space and initial state probabilities

#states = ['sleeping', 'eating', 'pooping']
states=list(result1.index)
#pi = [0.35, 0.35, 0.3]
pi=[1/13,1/13,1/13,1/13,1/13,1/13,1/13,1/13,1/13,1/13,1/13,1/13,1/13,]
state_space = pd.Series(pi, index=states, name='states')
print(state_space)
print(state_space.sum())

# create transition matrix
# equals transition probability matrix of changing states given a state
# matrix is size (M x M) where M is number of states


q_df = pd.DataFrame(columns=states, index=states)
for i in range(0,13):
    print(i)
    q_df.loc[states[i]]=result1.loc[result1.index[i]]
#q_df.loc[states[0]] = [0.4, 0.2, 0.4]
#q_df.loc[states[1]] = [0.45, 0.45, 0.1]
#q_df.loc[states[2]] = [0.45, 0.25, .3]

print(q_df)

q = q_df.values
print('\n', q, q.shape, '\n')
print(q_df.sum(axis=1))


#from pprint import pprint 

# create a function that maps transition probability dataframe 
# to markov edges and weights

def _get_markov_edges(Q):
    edges = {}
    for col in Q.columns:
        for idx in Q.index:
            edges[(idx,col)] = Q.loc[idx,col]
    return edges

edges_wts = _get_markov_edges(q_df)
print(edges_wts)

# create graph object
G = nx.MultiDiGraph()

# nodes correspond to states
G.add_nodes_from(states)
print(f'Nodes:\n{G.nodes()}\n')

# edges represent transition probabilities
for k, v in edges_wts.items():
    tmp_origin, tmp_destination = k[0], k[1]
    G.add_edge(tmp_origin, tmp_destination, weight=v, label=v)
print(f'Edges:')
print(G.edges(data=True))    

pos = nx.drawing.nx_pydot.graphviz_layout(G, prog='dot')
nx.draw_networkx(G, pos)

我遵循的示例运行得很好,但我的示例却不行。

谢谢

0 个答案:

没有答案