有没有办法使用节点名称索引numpy矩阵,通过networkx构建为adjacenjy矩阵
(我从.txt文件构建了networkx图解析线。
每行代表一个边缘,它的格式为SourceNode:DestNode:EdgeWeight
)
我需要矩阵因为我要计算某些节点的命中概率
答案 0 :(得分:1)
无论您如何构建图形,都可以计算它的邻接矩阵。 docs表示如果您未指定,则此图表中行和列的顺序将“由G.nodes()
生成”。
例如,
# create your graph
G = nx.DiGraph()
with open("spec.txt") as f:
for line in f:
for src, dest, weight in line.split(':'):
G.add_edge(src, dest, weight=weight)
# create adjacency matrix
# - store index now, in case graph is changed.
nodelist = G.nodes()
# extract matrix, and convert to dense representation
A = nx.adjacency_matrix(G, nodelist=nodelist).todense()
# normalise each row by incoming edges, or whatever
B = A / A.sum(axis=1).astype(float)
让我们假设您的节点按字母顺序标记,C-G。节点排序只是根据字典哈希,这个序列对我来说:['C', 'E', 'D', 'G', 'F']
。
如果要从矩阵中查找信息,可以使用如下查找:
ix = nodelist.index('D') # ix is 2 here
print A[ix,:]