使用Node id在numpy中建立索引矩阵

时间:2017-03-15 13:13:36

标签: numpy networkx

有没有办法使用节点名称索引numpy矩阵,通过networkx构建为adjacenjy矩阵 (我从.txt文件构建了networkx图解析线。  每行代表一个边缘,它的格式为SourceNode:DestNode:EdgeWeight) 我需要矩阵因为我要计算某些节点的命中概率

1 个答案:

答案 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,:]