Mam wykres NetworkX. Chciałbym wiedzieć, jak wykonać edge contraction między wieloma węzłami.Sieć w języku Python: skrócenie krawędzi
Na przykład, jeśli chciałem zawrzeć X, Y i Z:
_ node A _
_/ | \_
node X --- node Y --- node Z
staną
node A
|
node XYZ (or whatever X/Y/Z)
tworzenie wykresu nie jest problem. To działa. Chcę zmniejszyć wykres, łącząc węzły, które mają takie same "znaczenia": węzły, które nazywam "końcem lvl" (długość nazwy węzła jest równa 7) i które są ze sobą połączone.
Znalazłem funkcję kondensacji w NetworkX więc próbowałem go używać:
# edge contraction for same nodes
# for each node, get the links to other nodes "end lvl"
# if there is such a link, it means that these node are
# the sames
#
# copy graph
I = G
for n,d in G.nodes(data=True):
if n in I.nodes():
if len(n) == 7:
# list of nodes adjacent to n : filter only "end lvl" nodes
neighbors = [ node for node in I.neighbors(n) if len(node) == 7 ]
nodes_to_merges = neighbors.append(n)
I = nx.condensation(I,scc=nodes_to_merges)
Rzecz mam kiedy przekonwertować do formatu JSON jest:
{"directed": true, "graph": [], "nodes": [{"id": 0}], "links": [], "multigraph": false}
Jest problem jak ty można zobaczyć ...
Odwołanie do funkcji: here.
Jednym z rozwiązań byłoby zrobienie tego ręcznie za pomocą reprezentacji dyktatora (to_dict_of_dicts). – keyser
OK, nie jestem zaznajomiony z wykresami, ale powinienem poprawić moje pytanie, tak jak pytał mnie @zodiac. Oto nadchodzi. – user1254498
co robią funkcje nodes(), neighbours() i condensation()? co to jest nx? – xuanji