如何从 NetworkX 中的节点列表构建图形路径
How to build graph paths from list of nodes in NetworkX
我想做的是在 NetworkX 中构建一个图,其中每个节点都是一个火车站。要构建我所做的节点:
G = nx.Graph()
G.add_nodes_from(trains['Stopping place'].unique())
哪个(至少看起来)在工作。
现在,因为对于每一行我都有顺序的停靠点,所以我构建了我的路径:
stops_by_line = ((belgium_trains.sort_values(['Train number','Actual arrival datetime']).groupby('Train number'))['Stopping place'].apply(list).to_dict())
paths = ([tuple(val) for val in stops_by_line.values()])
变量看起来像这样:
[('HERGENRATH',
'CHENEE',
'ANGLEUR',
'LIEGE-GUILLEMINS',
'ANS',
'LEUVEN',
'HERENT',
'VELTEM',
'ERPS-KWERPS',
'KORTENBERG',
'NOSSEGEM',
'ZAVENTEM',
'DIEGEM',
'HAREN-ZUID',
'SCHAARBEEK',
'BRUSSEL-NOORD',
'BRUSSEL-CONGRES',
'BRUSSEL-CENTRAAL',
'BRUSSEL-KAPELLEKERK',
'BRUSSEL-ZUID'),
(...other ordered tuples of stops),...)]
现在我的问题是,由于所有这些元素也是节点名称,我如何按顺序使用这些元组构建边缘(例如,在 BRUSSEL-NOORD 和 BRUSSEL-CONGRES 之间添加一条边缘,然后从 BRUSSEL-CONGRES到 BRUSSEL-CENTRAAL 等等)?
您可以简单地在循环中使用 add_path
方法:
for path in paths:
nx.add_path(G, path)
Sidemark,如果你添加一条边(如上面的例子),那么 networkx
也会直接将相应的节点添加到图中。所以可能(如果所有站点都被某列火车覆盖)您之前不需要手动添加节点。
我想做的是在 NetworkX 中构建一个图,其中每个节点都是一个火车站。要构建我所做的节点:
G = nx.Graph()
G.add_nodes_from(trains['Stopping place'].unique())
哪个(至少看起来)在工作。
现在,因为对于每一行我都有顺序的停靠点,所以我构建了我的路径:
stops_by_line = ((belgium_trains.sort_values(['Train number','Actual arrival datetime']).groupby('Train number'))['Stopping place'].apply(list).to_dict())
paths = ([tuple(val) for val in stops_by_line.values()])
变量看起来像这样:
[('HERGENRATH',
'CHENEE',
'ANGLEUR',
'LIEGE-GUILLEMINS',
'ANS',
'LEUVEN',
'HERENT',
'VELTEM',
'ERPS-KWERPS',
'KORTENBERG',
'NOSSEGEM',
'ZAVENTEM',
'DIEGEM',
'HAREN-ZUID',
'SCHAARBEEK',
'BRUSSEL-NOORD',
'BRUSSEL-CONGRES',
'BRUSSEL-CENTRAAL',
'BRUSSEL-KAPELLEKERK',
'BRUSSEL-ZUID'),
(...other ordered tuples of stops),...)]
现在我的问题是,由于所有这些元素也是节点名称,我如何按顺序使用这些元组构建边缘(例如,在 BRUSSEL-NOORD 和 BRUSSEL-CONGRES 之间添加一条边缘,然后从 BRUSSEL-CONGRES到 BRUSSEL-CENTRAAL 等等)?
您可以简单地在循环中使用 add_path
方法:
for path in paths:
nx.add_path(G, path)
Sidemark,如果你添加一条边(如上面的例子),那么 networkx
也会直接将相应的节点添加到图中。所以可能(如果所有站点都被某列火车覆盖)您之前不需要手动添加节点。