我有一个无向网络x图如下,我想打印图的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个)。有没有办法使用networkx计算这4个同构类的数量?
我不仅限于networkx
,并乐意使用其他图书馆或其他语言获得答案。
如果需要,我很乐意提供更多细节。
与之前的post类似的解决方案:迭代所有三元组并识别它所属的类。由于类只是三个节点之间的边数,因此请计算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)