/ / Spojenie dvoch sieťových grafov na jednom okraji - python, graf, networkx

Spojenie dvoch sieťových grafov na jednom okraji - python, graf, networkx

Potrebujem graf s klastrami N, čo trochupredstavuje štruktúru sociálnych sietí. Plánoval som to vyriešiť tým, že vytvorím N grafy s štruktúrou barabasi albert a potom ich spojíme jedným uzlom.

import networkx as nx

a = nx.barabasi_albert_graph(10,2)
b = nx.barabasi_albert_graph(10,2)

nx.draw(a)

tu zadajte popis obrázku

nx.draw(b)

tu zadajte popis obrázku

to, čo chcem, je spojené takto:tu zadajte popis obrázku Ale nemôžem vidieť ani nájsť nejaký jednoduchý spôsob, ako to urobiť, existujú nejaké funkcie sieteX, ktoré dokážu urobiť práve toto?

odpovede:

1 pre odpoveď č. 1

Spojenie dvoch grafov podľa okrajov je naozaj jednoduché:

import matplotlib.pyplot as plt
import networkx as nx

a = nx.barabasi_albert_graph(10,2)
b = nx.barabasi_albert_graph(10,2)

c = nx.union(a,b, rename=("a-", "b-"))
c.add_edge("a-0", "b-0")

nx.draw_networkx(c,with_labels=True,node_size=500)
plt.show()

výkon

A ak chcete zlúčiť grafy na spoločnom uzle (to je uvedené vo vašej otázke v rozpore s názvom), môžete to urobiť:

import matplotlib.pyplot as plt
import networkx as nx

a = nx.barabasi_albert_graph(10,2)
b = nx.barabasi_albert_graph(10,2)

a= nx.relabel_nodes(a, { n: str(n) if n==0 else "a-"+str(n) for n in  a.nodes })
b= nx.relabel_nodes(b, { n: str(n) if n==0 else "b-"+str(n) for n in  b.nodes })

c = nx.compose(a,b)

nx.draw_networkx(c,with_labels=True,node_size=500)
plt.show()

výkon