Связывание нового узла с несколькими ориентированными графами - PullRequest
1 голос
/ 23 марта 2019

Я ищу способ в сети x связать два графика одним узлом из другого графика. После связывания результирующий граф (другой граф) содержит узлы двух графов в дополнение к его узлам. Например:

G=nx.DiGraph()
G.add_node(1)
G.add_node(2)
G.add_edge(1,2)

H=nx.DiGraph()
H.add_node(3)
H.add_node(4)
H.add_edge(3,4)

C=nx.DiGraph()
C.add_node(0)
C.add_node(5)

Теперь я хотел бы связать узел 0 в графе C с первым узлом обоих графов G и H (1,3), а также связать последний узел обоих графов (G и H) с узлом 5 в графе C ,

Я пытался создать функцию, но не помогло.

1 Ответ

0 голосов
/ 28 марта 2019

Графики в networkx являются отдельными объектами друг от друга. Вы абсолютно не можете иметь ссылку от Node1 в Graph1 до Node2 в Graph2. Единственный способ представить похожее поведение - составить два графика и создать связь между их узлами. Если два графика не пересекаются, вы можете использовать функцию union . Если они имеют одинаковые узлы, вы должны использовать функцию compose . Но обратите внимание на две важные вещи:

  1. Обе функции возвращают новый граф. Старые графики не меняются.
  2. Если вы используете функцию compose, все элементы, которые могут быть объединены, будут объединены. Например:
import networkx as nx

G=nx.DiGraph()
G.add_nodes_from([1, 2, 3])
G.add_edges_from([(1, 2), (2, 3)])

H=nx.DiGraph()
H.add_nodes_from([5, 2, 3])
H.add_edges_from([(5, 2), (2, 3)])

Q = nx.compose(G, H)
Q.nodes()


NodeView((1, 2, 3, 5))

Узлы 1 и 2 были объединены. Поэтому вы должны проверить все свои узлы на обоих графиках, если не хотите внезапного слияния.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...