Python 图中所有连通节点的计数
我有一个大于10k的(无序)数字对列表。我想直接或间接地将它们划分为一组连接对。我认为这对应于无向图。我正在使用python,并尝试了类似于表示这种结构的东西 为了了解连接到Python 图中所有连通节点的计数,python,graph,Python,Graph,我有一个大于10k的(无序)数字对列表。我想直接或间接地将它们划分为一组连接对。我认为这对应于无向图。我正在使用python,并尝试了类似于表示这种结构的东西 为了了解连接到i的所有号码, 我可以检查列表中除I之外的所有j是否都有从I到j的路径。然而,在这个实现中,计算时间对于我正在处理的列表的大小来说太长了。有没有更有效的方法?(或者是否已经建立了python库?听起来您似乎对计算图形的连接组件感兴趣。我建议调查一下包裹及其包装 例如,假设我们的数据是一组成对的数字,每对数字代表图形中的一条边
i
的所有号码,
我可以检查列表中除
I
之外的所有j
是否都有从I
到j
的路径。然而,在这个实现中,计算时间对于我正在处理的列表的大小来说太长了。有没有更有效的方法?(或者是否已经建立了python库?听起来您似乎对计算图形的连接组件感兴趣。我建议调查一下包裹及其包装
例如,假设我们的数据是一组成对的数字,每对数字代表图形中的一条边:
pairs = [
(1, 2),
(2, 4),
(3, 5),
(2, 5),
(7, 9),
(9, 10),
(8, 7)
]
在由这些边表示的图中,集合{1,2,3,4,5}
中的任意一对节点之间存在路径,并且{6,7,8,9,10}
中的任意一对节点之间也存在路径。但是没有路径,比如说从5
到7
。也就是说,图中有两个连接的组件
为了发现这些组件,我们首先导入networkx
并创建一个图形:
>>> import networkx as nx
>>> graph = nx.from_edgelist(pairs)
计算组件非常简单
>>> list(nx.connected_components(graph))
>>> [{1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}]
nx.connected_components
是一个生成器,因此这里我们将结果转换为一个列表,以显示所有连接的组件
我们还可以找到包含给定节点的连接组件:
>>> nx.node_connected_component(graph, 3)
{1, 2, 3, 4, 5}
我们还可以快速计算连接组件的数量:
>>> nx.number_connected_components(graph)
2
你是想找到一个图的连接部分吗?@jme是的,这听起来像是我要做的。是的,这就是我要找的。谢谢你的详细回答!连接的组件在scipy中也可用:。我不知道哪种实现更快,但它可以避免项目中的额外依赖。第二个链接已断开