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

GraphTool中SBM块数量显示异常原因及社区节点查询方法

graph_tool社区检测相关问题解答

为什么state.get_B()返回105?

graph_tool的BlockState对象在初始化时,默认设置的最大块数上限等于图的节点总数(这里polbooks数据集正好有105个节点)。get_B()方法返回的就是这个总块数上限,而非实际有节点的社区数量。

当你通过minimize_blockmodel_dl()完成社区检测后,算法会将节点合并到少数非空块中(也就是你绘图看到的3个社区),state.get_nonempty_B()返回的才是实际存在的非空社区数量,这和绘图结果一致。

如何获取每个社区的具体节点?

可以通过以下步骤获取:

  1. 先获取每个节点对应的块标签:
    block_labels = state.get_blocks().get_array()
    
    这里block_labels是一个数组,索引对应节点编号,值对应节点所属的块标签。
  2. 遍历非空块标签,收集对应节点:
    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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 06:12:45