使用带有自定义类的图生成器作为节点

时间:2014-08-23 23:24:02

标签: python networkx

我想使用一些内置的图形生成器,但使用自定义python类作为节点而不是整数。对此最好的方法是什么?我应该将自定义类添加为属性吗?

例如,在这里,我生成一个完整的图形,其中整数为节点:

import networkx as nx
K_5 = nx.complete_graph(5)

在这里,我创建了一个代理,我想将其用作节点而不是整数:

from agents import Agent
agent = Agent()

我想知道答案是否涉及创建网络,然后用nx.relabel_nodes()重新标记节点。

1 个答案:

答案 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>]