gpt4 book ai didi

python - 如何在 NetworkX 中仅绘制前 50-100 个连通分量子图;一次绘制多个子图

转载 作者:太空宇宙 更新时间:2023-11-03 20:41:20 25 4
gpt4 key购买 nike

抱歉,如果这很粗糙:这是我在 Stackoverflow 上发布的第一篇文章!我提前很抱歉没有发布代码,但我所做的一切都很复杂(也许这就是问题所在),所以描述应该有效。如果因为我是 Python 新手而无法描述问题,我也深表歉意;我不太确定如何在没有数据的情况下重新创建示例:(

使用 NetworkX 时,我经常在从 pandas 导入数据后运行具有数千个节点的大型无向图(我们称之为 G)。绝大多数节点只有一两条边,这对我来说只是噪音。我感兴趣的是具有大量节点的集群,而这实际上是少数。

因此,我将运行 nx.connected_components 命令来列出 G 包含的所有子图集的一长串列表,查看最上面的结果,并按时间打印我感兴趣的各个子图。时间。

因此,当我获得所有连接组件子图的生成器列表/字典(通常很长)时,我通常也会只查看前 50-100 个结果。因为这些往往有我正在寻找的东西。

我尝试了nx.connected_component_subgraphs,但是,有太多我不需要这种方式,它几乎和一次性可视化整个网络一样糟糕。

简而言之:我如何获取 nx.connected_components 给我的生成器/集合列表(然后将其缩短到前 50 个)并将其制作成一个新图表?

我尝试将 nx.component_components 的输出转换为列表,但它都是集合。

没有错误消息。

最佳答案

一种方法可能如下所示:

首先找到除N个最大的组件之外的所有组件

small_components = sorted(nx.connected_components(G), key=len)[:-N]

然后,从G中删除属于以下组件之一的所有顶点:

G.remove_nodes_from(itertools.chain.from_iterable(small_components))

下面是我们仅保留给定图表的两个最大组成部分的示例:

In [31]: G = nx.Graph()
In [32]: G.add_edges_from([(1, 2), (2, 3), (3, 4), (5, 6), (7, 8), (8, 9)])
In [33]: small_components = sorted(nx.connected_components(G), key=len)[:-2]
In [34]: small_components
Out[34]: [{5, 6}]
In [35]: G.remove_nodes_from(itertools.chain.from_iterable(small_components))
In [36]: G.nodes()
Out[36]: NodeView((1, 2, 3, 4, 7, 8, 9))

关于python - 如何在 NetworkX 中仅绘制前 50-100 个连通分量子图;一次绘制多个子图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56844412/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com