我想使用一些内置的图形生成器,但使用自定义python类作为节点而不是整数。对此最好的方法是什么?我应该将自定义类添加为属性吗?
例如,在这里,我生成一个完整的图形,其中整数为节点:
import networkx as nx
K_5 = nx.complete_graph(5)
在这里,我创建了一个代理,我想将其用作节点而不是整数:
from agents import Agent
agent = Agent()
我想知道答案是否涉及创建网络,然后用nx.relabel_nodes()
重新标记节点。
答案 0 :(得分:4)
Networkx似乎真的想要使用ID,而不是具体对象。但是你的想法是正确的 - 我们可以使用relabel_nodes()
将数字转换为对象实例。
演示:
import networkx as nx
class Agent(object):
def __init__(self, id):
self.id = id
def __repr__(self):
return '<Agent #{}>'.format(self.id)
g = nx.complete_graph(5)
print g.nodes()
nx.relabel_nodes(g, mapping=Agent, copy=False)
print g.nodes()
[0, 1, 2, 3, 4]
[<Agent #1>, <Agent #3>, <Agent #0>, <Agent #4>, <Agent #2>]