我有一个有向加权图,我成功地使用networkx创建了它。
我试图在这个网络上做出一些统计推断,但我遇到了麻烦。下面是它们:
(i)网络的平均程度。(我唯一能找到的是average_degree_connectivity,它返回一个字典,而不是一个带整个网络平均程度的浮点数)
(ii)该网络的平均加权程度。(与上文相同)
(iii)网络的平均聚类系数。(我知道我必须使用nx.average_clustering(g),但是如何考虑它是加权有向图这一事实?我一直收到错误: NetworkXError:(“聚类算法未定义”,“用于有向图”)。
谢谢!
发布于 2015-03-15 19:06:08
(i)网络的平均程度。(我唯一能找到的是average_degree_connectivity,它返回一个字典,而不是一个带整个网络平均程度的浮点数)
假设您的图形对象是G。
degrees = G.degree()
sum_of_edges = sum(degrees.values())计算平均值只是一个除以节点数的问题。
(ii)该网络的平均加权程度。(与上文相同)
获取所有节点的列表,为每个节点获取所有边的列表,每个节点的加权属性之和如下:
edgesdict = G.edge
total = 0
for node_adjacency_dict in edgesdict.valuess():
total += sum([adjacency.get("weight",0) for adjacency in node_adjacency_dict.values()]) (iii)网络的平均聚类系数。(我知道我必须使用nx.average_clustering(g),但是如何考虑它是加权有向图这一事实?我一直收到错误: NetworkXError:(“聚类算法未定义”,“用于有向图”)。
关键是,在你定义它之前,它不是很好的定义。我认为,对于StackOverflow答案来说,这需要做的事情太多了,所以我给您留下了一个问题,就是为您的特定问题定义一个算法。
(iv)网络中最大最短路径长度。(我知道你找到了巨人= max(nx.connected_component_subgraphs(G),key=len)这样的巨型分量,但是我们如何在其中得到最大最短路径长度?)
运行ipython之类的。输入giant.;您将得到一个使用giant可以做的事情的列表。
发布于 2015-03-15 19:40:02
以下是一些更多的想法,以补充@马库斯-穆勒所写的内容。
对于平均程度(注意你的有向图,这是进出度之和)
In [1]: import networkx as nx
G
In [2]: G = nx.DiGraph()
In [3]: G.add_edge(1,2,weight=7)
In [4]: G.add_edge(3,4,weight=17)
In [5]: sum(G.degree().values())/float(len(G))
Out[5]: 1.0
In [6]: sum(G.degree(weight='weight').values())/float(len(G))
Out[6]: 12.0在NetworkX中没有关于加权有向聚类的定义。有一些建议https://github.com/networkx/networkx/issues/859,但还没有人完成实施。
对于有向图,将最大连通分量的概念分解为两个定义。弱连通组件是在考虑图的无向版本(将每个有向边替换为无向边)时所连接的组件。强连接组件是指每一对节点都可以相互访问(有路径)的组件。
发布于 2021-03-28 07:04:40
从Networkx2.5 (2021)开始,您可以使用networkx.info(G)获得图的平均度
代码:
print(nx.info(G))输出:
Name:
Type: Graph
Number of nodes: 85
Number of edges: 63
Average degree: 1.4824https://stackoverflow.com/questions/29064636
复制相似问题