Как получить перепись триады в неориентированном графе, используя networkx в python - PullRequest
0 голосов
/ 17 февраля 2019

У меня есть неориентированный график networkx следующим образом, и я хочу напечатать triad census графика.Однако nx.triadic_census(G) не поддерживает неориентированные графы.

import networkx as nx
G = nx.Graph()
G.add_edges_from(
    [('A', 'B'), ('A', 'C'), ('D', 'B'), ('E', 'C'), ('E', 'F'),
     ('B', 'H'), ('B', 'G'), ('B', 'F'), ('C', 'G')])

Ошибка: NetworkXNotImplemented: not implemented for undirected type

Мне известно, что существует только 4 изоморфных класса для неориентированных графов (не 16 как ориентированных графов)).Есть ли способ получить количество этих 4 изоморфных классов с помощью networkx?

Я не ограничен networkx и рад получить ответы, используя другие библиотеки или другие языки .

Я с удовольствием предоставлю более подробную информацию, если это необходимо.

1 Ответ

0 голосов
/ 18 февраля 2019

Решение, аналогичное предыдущему посту : переберите все триады и определите класс, к которому он принадлежит.Поскольку классы представляют собой просто число ребер между тремя узлами, подсчитайте количество ребер для каждой комбинации из 3 узлов.

from itertools import combinations

triad_class = {}
for nodes in combinations(G.nodes, 3):
    n_edges = G.subgraph(nodes).number_of_edges()
    triad_class.setdefault(n_edges, []).append(nodes)
...