Таким образом, здесь происходит то, что networkx пытается создать два временных графика, чьи узлы равны 'S0D0-N0'
, 'S0D0-N1'
для одного и 'S1D0-N1'
, 'S1D0-N2'
для другого. Затем он пытается присоединиться к ним.
Однако, когда вы копаете код, когда он это делает, два новых созданных графика имеют тот же класс, что и оригиналы. Итак, давайте назовем новые созданные графики H1
и H2
. Поскольку H1
и H2
также имеют класс die
, они инициализируются узлами 'N0'
и 'N1'
, а затем добавляются 'S0D0-N0'
, 'S0D0-N1'
или 'S1D0-N1'
, 'S1D0-N2'
. Так что оба инициализируются с 'N0'
и 'N1'
.
Итак, на следующем этапе процесса union
он проверяет, есть ли у H1
и H2
какие-либо общие узлы, и они это делают. Итак, вы получите ошибку.
Так вот в чем причина ошибки. Как это исправить, вероятно, зависит от того, почему вы инициализируете графики этими узлами, и какой класс вы хотите иметь Top
.
Если Top
имеет класс die
, он должен иметь 'N0'
и 'N1'
(из-за инициализации), что, как я подозреваю, вам на самом деле не нужно. Если вы просто хотите, чтобы Top
был Graph
, вы можете сначала превратить S0D0
и S1D0
в Graph
s:
Top = nx.union(nx.Graph(S0D0), nx.Graph(S1D0), rename=('S0D0', 'S1D0'))