【问题标题】:Simple Way for Modifying Attributes of Single nodes in Networkx 2.1+Networkx 2.1+中修改单个节点属性的简单方法
【发布时间】:2018-11-27 21:55:47
【问题描述】:

我正在寻找一种简单的方法来修改 NetworkX Graph 中单个节点的单个属性的值。

NetworkX 文档只提到了一个为图中所有节点设置属性的函数,例如:

nx.set_node_attributes(G, bb, 'betweenness')

这在许多情况下可能是合适的,在这些情况下,这样的属性很容易为图中的所有节点计算(比如提到的介数)。同样,有一种简单的方法可以访问 NetworkX 中的单节点属性:

graph.nodes[nodeName][attribute]

但是,以这种方式访问​​的属性是只读的。

所以我正在寻找一种设置属性的方法,就像阅读一样简单。

提前致谢。

【问题讨论】:

  • “高效”是什么意思?快吗?
  • 对不起,我可能已经提前澄清了。我的意思是写更少的代码(更少,例如收集字典中所有节点的属性,修改我真正想要修改的唯一属性,然后调用提到的 setter)。
  • 好的,那么您可以通过向我们展示您当前用于修改单个属性的几行代码来改进您的问题。
  • 其实我还没有实现这种方式。这只是它应该工作的一种方式。文档中描述的 set_node_attributes 函数。但我会改变问题

标签: python-3.x graph networkx


【解决方案1】:

在您的示例中,bb 是一个字典,其键是节点。您不需要 dict 为图中的所有节点提供一个键,只需要为其定义属性的节点即可。在下面的示例中,我创建了一个图形,然后将节点0'weight' 设置为5,并将节点32 设置为。这使其他节点的属性不受影响,因此由于它们从未被创建,因此它们不存在。

import networkx as nx
G = nx.fast_gnp_random_graph(10,0.2)
nx.set_node_attributes(G, {0:5, 3:2}, 'weight')
G.nodes[0]['weight']
> 5
G.nodes[3]['weight']
> 2
G.nodes[1]['weight']
> KeyError: 'weight'

所以我们为03 设置了权重,但没有为其他任何一个设置权重。您也可以一次设置多个属性,但这需要稍微不同的调用。我们这里有

nx.set_node_attributes(G, {1:{'weight':-1, 'volume':4}})
G.nodes[1]['weight']
> -1
G.nodes[1]['volume']
> 4

只是看看这些属性是什么样子的:

G.nodes(data=True)
> NodeDataView({0: {'weight': 5}, 1: {'weight': -1, 'volume': 4}, 2: {}, 3: {'weight': 2}, 4: {}, 5: {}, 6: {}, 7: {}, 8: {}, 9: {}})

【讨论】:

  • 完美!非常感谢,帮我解决了问题
猜你喜欢
  • 1970-01-01
  • 2021-12-16
  • 2011-04-28
  • 1970-01-01
  • 2017-06-10
  • 1970-01-01
  • 2019-04-08
  • 2012-03-27
  • 2015-12-22
相关资源
最近更新 更多