繁体   English   中英

如何创建有向图的邻接矩阵?

[英]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 轻松完成,一旦您解析您的字典,使其更适用于图形创建(例如,由边连接的节点列表)。

我会去生成你的有向图的nodesedges列表

# 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM