Python NetworkX邻接矩阵建图后如何为节点分配名称
NetworkX为numpy邻接矩阵生成的图分配节点名称实现方案
你用nx.from_numpy_matrix生成的图G,默认节点是从0开始计数的连续整数ID,和numpy邻接矩阵的行/列索引完全一一对应,只要你准备的节点名称列表顺序和矩阵索引匹配,用下面两种方法都可以完成名称分配:
- 方法1:直接将节点ID替换为对应名称(最常用,后续遍历、计算、导出时可以直接用名称作为节点标识)
# 替换成你自己准备好的节点名称列表,注意顺序必须和矩阵索引对应 node_name_list = ["节点A", "节点B", "处理站", "填埋场"] # 生成 整数ID:节点名称 的映射字典 id_mapping = dict(zip(G.nodes(), node_name_list)) # 完成节点重命名 G = nx.relabel_nodes(G, id_mapping)
- 方法2:保留原始整数节点ID,仅给节点添加名称属性(适合需要保留原始索引做矩阵关联计算的场景)
# 替换成你自己准备好的节点名称列表 node_name_list = ["节点A", "节点B", "处理站", "填埋场"] for node_id, node_name in zip(G.nodes(), node_name_list): G.nodes[node_id]['name'] = node_name
注意:操作前请确认节点名称列表的长度和邻接矩阵的阶数(即
A.shape[0])完全一致,且列表顺序严格匹配矩阵行/列的索引顺序,否则会出现节点名称错位的问题。
赋值完成后可以运行下面的代码校验结果是否正确:
# 方法1赋值后直接打印所有节点即可 print(list(G.nodes())) # 方法2赋值后打印带属性的节点列表 print(list(G.nodes(data=True)))
内容的提问来源于stack exchange,提问作者Fabio
相关产品推荐
相关产品推荐

