2016-06-16 2 views
0

Я не обязательно собираюсь объединить два графика сети, как видно из этого kind of question. То, что я хотел бы сделать, это иметь графики n, которые хранятся отдельно в памяти и имеют возможность подключать каждый график через край. Я не хочу объединять их в более крупный график, поскольку я ожидаю, что каждый подграф будет занимать разумный объем памяти, как есть, и я хотел бы иметь возможность выделять объекты памяти для параллельной обработки.Подключение двух отдельных сетей с краем при сохранении отдельных объектов памяти

Фактически, я хотел бы связать GraphA, NodeX с GraphB, NodeY через EdgeXA_BY, однако этот край не создает новый суперграф в переменной (то есть, надувной график GraphA содержит ВСЕ ребра/узлы из GraphB).

Если я просматриваю GraphA, и мне нужно добраться до GraphB, я могу следовать за этим краем в объект памяти.

Возможно ли это в NetworkX, или мне нужно иметь внутреннее отображение объектов графа, которое будет загружать каждый подграф в память по мере необходимости?

ответ

1

Узлы графа могут быть графиком.

import networkx as nx 
G=nx.Graph() 
H=nx.Graph() 
S=nx.Graph() #the (super)graph of graphs 
H.add_edge(1,2) 
G.add_edge('parrot','Norway') 
S.add_edge(H,G) 
S.edges() 
> [(<networkx.classes.graph.Graph at 0x1063dd390>, 
    <networkx.classes.graph.Graph at 0x1063dd350>)] 
S.neighbors(H) 
> [<networkx.classes.graph.Graph at 0x1063dd390>] 

Возможно, есть способ вернуть их с именем, которое вы хотите назначить, а не по типу и положению памяти по умолчанию. Я не знаю, как это сделать, если кто-то это сделает, оставьте комментарий, чтобы я мог обновить этот ответ.

+0

Интересный ответ. Итак, существует общий узел между H и G. Является ли связь между H и G, а затем на узле 2? – espais

+0

No - H является узлом в S. G является узлом в S. Соединение между графиком H и графом G. – Joel

+0

Я редактирую ответ, чтобы удалить общий узел. – Joel