NetworkX节点gen属性解引用问题:如何获取属性值用于比较?
问题解决:正确获取NetworkX节点的gen属性值
你的问题出在nx.get_node_attributes(G, "gen")的使用上——它返回的是所有节点的属性字典(格式为{节点ID: 世代值}),而非当前循环节点的单个世代数值,所以无法直接和数值g做比较。
两种修正方案:
方案1:直接通过节点ID获取单个属性
把循环中获取属性的代码替换为直接读取当前节点的gen值:
for node in G.nodes(): # 遍历节点,寻找当前世代的节点 level = G.nodes[node]['gen'] # 获取当前节点的gen属性数值 print("check 1, level is:", level, "g is:", g) if level == g: print("check 2") y = scipy.stats.poisson.rvs(mu=r, size=1) # 生成感染数量 N[count] = N[count] + y # 更新感染计数
方案2:遍历节点时直接获取属性数据
使用G.nodes(data=True)同时拿到节点ID和属性字典,避免重复查询,效率更高:
for node, attrs in G.nodes(data=True): # 同时获取节点ID与属性字典 level = attrs['gen'] print("check 1, level is:", level, "g is:", g) if level == g: print("check 2") y = scipy.stats.poisson.rvs(mu=r, size=1) # 生成感染数量 N[count] = N[count] + y # 更新感染计数
另外注意:原代码中每次循环都调用nx.get_node_attributes属于冗余操作,会重复获取所有节点的属性,上述两种方案都能避免这个问题。
内容的提问来源于stack exchange,提问作者slacks37
相关产品推荐
相关产品推荐

