我试图在python中创建一个有向图的邻接矩阵。我理解邻接矩阵的概念。但是我无法在python中创建邻接矩阵。我用链接和轮廓表示了有向图。 inlinks意味着如果有一个节点的传入边缘,并且outlinks意味着是否存在来自节点的传出链接。如何在python中使用以下图形创建一个邻接矩阵。我真的被困在这里。请建议我创建方法邻接矩阵。
{'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': []}}
答案 0 :(得分:0)
一旦您解析字典以使其更易于创建图形(例如,由边连接的节点列表),就可以使用NetworkX轻松完成此操作。
我将使用
生成有向图的nodes
和edges
的列表
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': []}}
# 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()