2

我有一个包含机场信息的文件。我如何在图中找到巨型组件的分数?数据看起来像

1 43
1 52
43 1
53 146

依此类推,它只有 source-target ,即从一个机场到另一个机场。

Q. 随机选择 p 0.01 的一小部分节点并将它们从网络中删除。计算属于被攻击网络的巨型组件(gee)的节点的比例。试过这个

> listofnodes=A.nodes()
print('Number of nodes  before reducing ' ,len(listofnodes))
numofnodes=A.number_of_nodes()
sample=int(numofnodes*0.1)
>output : Number of nodes  before reducing  940
RandomSample = random.sample(listofnodes, sample)
G.remove_nodes_from(RandomSample)
print('Number of nodes  before reducing ' ,len(G.nodes))
>Number of nodes  before reducing  534

https://mathematica.stackexchange.com/questions/130525/how-can-i-remove-a-fraction-p-of-nodes-or-edges-from-a-graph-randomly 试图做这样的事情,这里的问题陈述是我希望完成的,分数如何在攻击中幸存下来,但是那里使用的函数给出了一个错误,说没有这样的函数。很抱歉早些时候:)

4

1 回答 1

1

我不会假装给你完整的答案,但我会给你一些代码来帮助你度过难关,并将你重定向到 networkX 文档。

您已经设法做到了:
随机选择 p 0.01 的一小部分节点并将它们从网络中删除。
(实际上您是在 p=0.1 的情况下这样做的)

接下来,您需要计算属于巨型组件的节点的百分比:

这是一个关于如何提取“随机”图的巨大分量的示例:

G = nx.extended_barabasi_albert_graph(1000, 1, 0.1, 0.2, seed=1)

giantC = max(nx.connected_component_subgraphs(G), key=len) 
# connected_component_subgraphs has been removed. Please read EDIT

现在giantC代表巨型组件中的所有节点,您如何获得G属于巨型组件的节点的分数giantC

然后,您只需要在攻击之前和之后计算相同的值。

编辑:由于 NetworkX 2.4 版connected_component_subgraphs已被删除,因此对于最新版本,请使用: connected_components. 但是,此函数返回一组节点(而不是图),因此用于g.subgraph创建组件的诱导子图:

giantC = g.subgraph(max(nx.connected_components(g), key=len))

(基于此文档

于 2020-12-07T10:27:15.377 回答