我想使用一些内置的图形生成器,但使用自定义 python 类作为节点而不是整数。最好的方法是什么?我应该添加自定义类作为属性吗?
例如,这里我生成一个以整数为节点的完整图:
import networkx as nx
K_5 = nx.complete_graph(5)
Run Code Online (Sandbox Code Playgroud)
在这里,我创建了一个代理,我想将其用作节点而不是整数:
from agents import Agent
agent = Agent()
Run Code Online (Sandbox Code Playgroud)
我想知道这个问题的答案是否涉及创建一个网络,然后用 重新标记节点nx.relabel_nodes()。
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()
Run Code Online (Sandbox Code Playgroud)
[0, 1, 2, 3, 4]
[<Agent #1>, <Agent #3>, <Agent #0>, <Agent #4>, <Agent #2>]
Run Code Online (Sandbox Code Playgroud)