[英]How to create an adjacency matrix of a directed graph?
我正在尝试在 python 中制作有向图的邻接矩阵。
我理解邻接矩阵的概念,但我无法在 python 中创建邻接矩阵。
我已经使用 inlinks 和 outlinks 表示有向图,其中“inlinks”是节点的传入边,“outlinks”是节点的传出边:
data = {'19.json': {'outlink': [], 'inlink': []},
'26.json': {'outlink': [], 'inlink': []},
'4.json': {'outlink': [], 'inlink': []},
'25.json': {'outlink': [], 'inlink': []},
'1.json': {'outlink': [], 'inlink': ['17.json', '2.json']},
'24.json': {'outlink': [], 'inlink': []},
'13.json': {'outlink': [], 'inlink': []},
'16.json': {'outlink': [], 'inlink': []},
'14.json': {'outlink': ['17.json', '2.json'], 'inlink': []},
'17.json': {'outlink': ['1.json', '23.json'], 'inlink': ['14.json']},
'15.json': {'outlink': [], 'inlink': []},
'3.json': {'outlink': [], 'inlink': []},
'9.json': {'outlink': [], 'inlink': []}}
如何使用python中的上述表示创建其邻接矩阵?
我真的被困在这里了。
这可以使用 NetworkX 轻松完成,一旦您解析您的字典,使其更适用于图形创建(例如,由边连接的节点列表)。
我会去生成你的有向图的nodes
和edges
列表
# nodes are the keys of the dict
nodes = data.keys()
# edges can be found via list comprehensions to create a list of pairs connected by an edge
outedges = [(k, j) for k in data.keys() for j in data[k]['outlink']]
inedges = [(j, k) for k in data.keys() for j in data[k]['inlink']]
edges = set(outedges + inedges)
然后,将它们传递给 NetworkX 方法以创建有向图
import networkx as nx
# we can create the directed graph
G = nx.DiGraph()
# add all nodes and edges to it
G.add_nodes_from(nodes)
G.add_edges_from(edges)
# we may even draw the graph to inspect it
nx.draw(G, with_labels=True)
最后,你可以计算邻接矩阵
M = nx.adjacency_matrix(G).todense()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.