2014-04-01 3 views
2

У меня есть MULTIPLE линейные графики равной длины и параллельные друг другу в networkx MultiDigraph, как я могу перебирать графики и добавлять ребра к противоположным узлам с ребрами (NB узлы находятся в вложенный список) s т.е. соединить 2 & 2а, 3 & 3a и т.д.Объединение узлов во вложенных списках в Networkx MultiDigraph

nodes1 = [[2,5,7,8,9,10],[3,15,37,58,69,10]] 
nodes2 = [['2a','5a','7a','8a','9a','10a'],['3a','15a','37a','58a','69a','10a']] 
       BEFORE 
      2---------3---------4----------5----------6 



      2a---------3a-------4a--------5a---------6a 


           AFTER 
      2---------3---------4----------5----------6 
      | |  | |  | |  | |  | | 
      | |  | |  | |  | |  | | 
      | |  | |  | |  | |  | | 
      2a--------3a--------4a----------5a--------6a 
+0

Обращается график не выглядит так жарко, но я напечатал края от результирующего графика, чтобы доказать края, что вы просили – EdChum

+0

Спасибо Ed Я очень ценю вашу assisstance – Nobi

+0

Нет проблем, не репост вопросы, так как это может раздражать некоторых людей, поэтому, пожалуйста, удалите другой вопрос – EdChum

ответ

3

Предполагая длины матча списка и подсписка совпадают, то вы можете сделать это:

In [33]: 

import networkx as nx 
nodes1 = [[2,5,7,8,9,10],[3,15,37,58,69,10]] 
nodes2 = [['2a','5a','7a','8a','9a','10a'],['3a','15a','37a','58a','69a','10a']] 

In [47]: 
# build an edge list  
edge_list = [] 
# iterate over the length of the lists, access each list and zip them 
for i in range(len(nodes1)): 
    edge_list = edge_list + (list(tuple(zip(nodes1[i], nodes2[i])))) 
    # now add the opposite direction 
    edge_list = edge_list + (list(tuple(zip(nodes2[i], nodes1[i])))) 
edge_list 
0 
1 
Out[47]: 
[(2, '2a'), 
(5, '5a'), 
(7, '7a'), 
(8, '8a'), 
(9, '9a'), 
(10, '10a'), 
('2a', 2), 
('5a', 5), 
('7a', 7), 
('8a', 8), 
('9a', 9), 
('10a', 10), 
(3, '3a'), 
(15, '15a'), 
(37, '37a'), 
(58, '58a'), 
(69, '69a'), 
(10, '10a'), 
('3a', 3), 
('15a', 15), 
('37a', 37), 
('58a', 58), 
('69a', 69), 
('10a', 10)] 
In [48]: 

G = nx.DiGraph() 
G.add_edges_from(edge_list) 
G.edges() 
Out[48]: 
[(2, '2a'), 
(3, '3a'), 
(5, '5a'), 
(7, '7a'), 
(8, '8a'), 
(9, '9a'), 
(10, '10a'), 
(15, '15a'), 
('5a', 5), 
('69a', 69), 
('2a', 2), 
(69, '69a'), 
('7a', 7), 
(37, '37a'), 
('8a', 8), 
('9a', 9), 
('10a', 10), 
('15a', 15), 
('58a', 58), 
('37a', 37), 
(58, '58a'), 
('3a', 3)] 

In [49]: 

nx.draw(G) 

enter image description here

Смежные вопросы