You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用NetworkX与Python提取仅含2个节点的孤立子图

提取NetworkX中仅含2个节点的孤立子图及生成簇列表

一、提取仅含2个节点的孤立子图

这类子图本质是大小为2的连通分量,且两个节点仅通过单条边连接(每个节点的度为1)。具体实现步骤如下:

1. 构建图结构

先基于你的数据表构建NetworkX无向图:

import networkx as nx
import pandas as pd

# 读取数据表(替换为你的实际文件路径)
df = pd.read_csv('your_data.csv')
# 从DataFrame生成无向图,保留distance边属性
G = nx.from_pandas_edgelist(df, source='Name1', target='Name2', edge_attr='distance')

2. 筛选目标子图

通过连通分量筛选出符合条件的子图:

# 获取图中所有连通分量
all_components = list(nx.connected_components(G))

# 筛选出仅含2个节点的分量
two_node_components = [comp for comp in all_components if len(comp) == 2]

# 可选:额外验证每个节点的度为1(确保是单条边连接的孤立对,排除多重边场景)
two_node_components = [comp for comp in two_node_components if all(G.degree(node) == 1 for node in comp)]

3. 输出结果

将结果转换为边列表格式方便查看:

# 转换为元组形式的边列表
two_node_pairs = [tuple(comp) for comp in two_node_components]
print("仅含2个节点的孤立子图对:")
for pair in two_node_pairs:
    print(pair)

二、生成簇列表

这里的“簇”对应图中的连通分量——即图中互相连通的节点集合,不同簇之间没有边连接。直接获取所有连通分量即可:

# 获取所有簇(连通分量)
clusters = list(nx.connected_components(G))

# 可选:按簇的大小从大到小排序
sorted_clusters = sorted(clusters, key=lambda x: len(x), reverse=True)

print("所有簇列表:")
for idx, cluster in enumerate(sorted_clusters, 1):
    print(f"簇{idx}: {cluster}")

说明

从你提供的示例数据和图来看,示例图中存在一个以BBB为中心的大簇,以及若干两两相连的孤立小簇,上述代码可准确提取这些孤立对,并输出所有簇的集合。

内容的提问来源于stack exchange,提问作者LascieL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 17:36:10