GraphTool中SBM块数量显示异常原因及社区节点查询方法
graph_tool社区检测相关问题解答
为什么state.get_B()返回105?
graph_tool的BlockState对象在初始化时,默认设置的最大块数上限等于图的节点总数(这里polbooks数据集正好有105个节点)。get_B()方法返回的就是这个总块数上限,而非实际有节点的社区数量。
当你通过minimize_blockmodel_dl()完成社区检测后,算法会将节点合并到少数非空块中(也就是你绘图看到的3个社区),state.get_nonempty_B()返回的才是实际存在的非空社区数量,这和绘图结果一致。
如何获取每个社区的具体节点?
可以通过以下步骤获取:
- 先获取每个节点对应的块标签:
这里block_labels = state.get_blocks().get_array()block_labels是一个数组,索引对应节点编号,值对应节点所属的块标签。 - 遍历非空块标签,收集对应节点:
节点索引和图import numpy as np # 获取所有非空块的标签 unique_blocks = np.unique(block_labels) # 构建社区到节点的映射 community_map = {} for block_id in unique_blocks: # 获取当前块包含的所有节点索引 community_map[block_id] = np.where(block_labels == block_id)[0].tolist() # 输出结果 for bid, nodes in community_map.items(): print(f"社区 {bid} 的节点列表: {nodes}")g中g.get_vertices()返回的节点顺序完全一致,你可以通过索引直接访问节点的属性。
内容的提问来源于stack exchange,提问作者Rafael Lima Peixoto
相关产品推荐
相关产品推荐

