使用图形生成器和自定义类作为节点

JWS*_*JWS 3 python networkx

我想使用一些内置的图形生成器,但使用自定义 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()

joh*_*all 5

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)