Как написать в Python NetworkX такой же код R igraph - PullRequest
0 голосов
/ 26 марта 2020

Мой учитель использует R, и теперь он объясняет теорию графов. Я не хочу использовать R, потому что я использую Python и предпочитаю его, поэтому я хочу изучить NetworkX ( NOT Python igraph, потому что у меня много проблем с печатью графиков ).

Дело в том, что код Python кажется действительно сложным по сравнению с R.

Я объясню лучше: как вы можете реализовать этот код R

fig <- graph.formula(a-b, c-e-d, i-k-j-g-i, f-g-j-h-f, k-j-h-l-k, h-l-m-h)

в NetworkX?

Возможно ли это только в одном ряду? Если нет, как я могу это сделать?

спасибо!

Ответы [ 2 ]

1 голос
/ 26 марта 2020

Если вы посмотрите на igraph документацию formula, указанную вами линию

fig <- graph.formula(a-b, c-e-d, i-k-j-g-i, f-g-j-h-f, k-j-h-l-k, h-l-m-h)

создаст только график с заданными (ненаправленными) ребрами и узлы. Итак, вы хотите создать только graph, вы найдете все, что вам нужно, в учебнике networkx (add_edges_from метод)

import networks as nx

graph = nx.Graph() # undirected as desired
graph.add_edges_from([("a", "b"), ("c","e"), ("e","d"), ("i","k"), ("k", "j"), ("j", "g"), ("g", "i")])

Как видите, это немного больше работы (я остановился после первых трех групп).

1 голос
/ 26 марта 2020

Конечно, вы можете сделать это в сети X. Я не знаю, если одна строка, но очень мало.

Приведенный ниже код создает ориентированный граф с указанными вами узлами и ребрами, а затем dr aws it. Теоретически можно добавить все ребра в одну строку (и есть более быстрые способы сделать это), но этот код имеет одну строку для каждой разделенной запятыми части вашего кода R для лучшей читаемости.

import networkx as nx
G = nx.DiGraph() #Creates empty graph
G.add_nodes_from(range(0,13))#Adds nodes
G.add_edges_from([(0,1)])#Adds directed edges
G.add_edges_from([(2,3),(3,4)])
G.add_edges_from([(8,10),(10,9),(9,6),(6,8)])
G.add_edges_from([(5,6),(6,9),(9,7),(7,5)])
G.add_edges_from([(10,9),(9,7),(7,11),(11,10)])
G.add_edges_from([(7,11),(11,12),(12,7)])
nx.draw(G)
...