如何将自定义对象作为networkx的节点,如何查找?

时间:2011-12-13 14:23:55

标签: python graph networkx

我希望每个节点都有一个ipaddress字符串,纬度和经度值。另外,如何在查找networkx创建的图形时获得指向此类对象的指针?

1 个答案:

答案 0 :(得分:5)

NetworkX基于图表可以像字典一样运行的想法。您不需要自定义对象充当节点,因为节点可以将任意属性添加到其“词典”中。

考虑以下互动环节:

>>> import networkx as nx
>>> G = nx.Graph()
>>> G.add_node(1)
>>> G.node[1]['ipaddress'] = '8.8.8.8'
>>> G.node[1]['longitude'] = 37
>>> G.node[1]['latitude'] = 50
>>> G.node[1]
{'latitude': 50, 'ipaddress': '8.8.8.8', 'longitude': 37}
>>> G.node[1]['ipaddress']
'8.8.8.8'

此处,创建了一个包含单个节点1的图表,ipaddresslongitudelatitude与之关联。您可以通过询问节点的图表,以恒定的时间直接访问该节点,并以相同的方式获取其属性。

要引用特定节点,您有几种可能性。例如,您可以使用字典来存储任何所需属性的列表或节点集。第二种可能性 - 仅对每个节点唯一的单个属性有用 - 是直接将该属性用作节点。例如,对于IP地址:

>>> H = nx.Graph()
>>> H.add_node('8.8.8.8', longitude=37, latitude=50)
>>> H.node['8.8.8.8']
{'latitude': 50, 'longitude': 37}

在这里,我还利用了NetworkX提供的便利,在创建节点时指定属性。