![](/img/trans.png)
[英]Load nodes with attributes and edges from DataFrame to NetworkX
[英]dereferencing attributes from nodes in networkx
我正在编写一个程序,该程序将使用图表来表示潜在感染的传播。 为了做到这一点,我将世代属性分配给我的节点,但是我在取消引用我的“gen”属性时遇到了麻烦。 我设置的用于比较 level 和 gen 的打印语句(应该等于触发程序中的下一步)返回:check 1, level is: {1: 0} g is: 0. 我将如何 go 关于取消引用属性,以便它们只返回一代,我可以将其与我目前正在建模的一代进行比较?
for node in G.nodes(): #check through nodes and find the ones in the current gen
level = nx.get_node_attributes(G, "gen") #get the gen
print("check 1, level is:", level, "g is:", g)
if level == g:
print("check 2")
y = scipy.stats.poisson.rvs(mu=r, size=1) #see how many are infected
N[count] = N[count] + y #how many infected
这就是我目前分配属性的方式,标记它是数字节点,然后根据计数器为其分配一代
G.add_node(1, gen = count)
nx.get_node_attributes(G, "gen")
为字典{node:gen, ...}
提供所有具有gen
的节点(并跳过没有gen
的节点)-您可以直接将它与for
-loop一起使用:
for node in nx.get_node_attributes(G, "gen"):
gen = G.nodes[node]['gen']
print('node:', node, 'gen:', gen)
if gen == g:
print("check 2")
使用.items()
或更短(因为它是字典)
for node, gen in nx.get_node_attributes(G, "gen").items():
print('node:', node, 'gen:', gen)
if gen == g:
print("check 2")
您还可以使用G.nodes.data()
获取包含所有节点的字典{node:attributes, ...}
:
for node, attribs in G.nodes.data():
#gen = attribs['gen'] # it raises error when node doesn't have `gen`
gen = attribs.get('gen') # it gives `None` when node doesn't have `gen`
最少的工作代码(一个节点没有gen
)
import networkx as nx
G = nx.Graph()
g = 0
G.add_node(1, gen=g)
G.add_node(2, gen=1)
G.add_node(3) # without gen
G.add_node(4, gen=g)
for node, gen in nx.get_node_attributes(G, "gen").items():
#gen = G.nodes[node]['gen']
print('node:', node, 'gen:', gen)
if gen == g:
print("> check 2")
print('---')
for node, attribs in G.nodes.data():
#gen = attribs['gen'] # it raises error when node doesn't have `gen`
gen = attribs.get('gen') # it gives `None` when node doesn't have `gen`
print('node:', node, 'attribs:', attribs, 'gen:', gen)
if gen == g:
print("> check 2")
结果:
node: 1 gen: 0
> check 2
node: 2 gen: 1
node: 4 gen: 0
> check 2
---
node: 1 attribs: {'gen': 0} gen: 0
> check 2
node: 2 attribs: {'gen': 1} gen: 1
node: 3 attribs: {} gen: None
node: 4 attribs: {'gen': 0} gen: 0
> check 2
编辑:
在源代码中,我找到了示例
https://github.com/networkx/networkx/blob/main/networkx/classes/graph.py#L752
for node, attribs in G.nodes(data=True):
print('node:', node, 'attribs:', attribs, 'gen:', attribs.get('gen'))
for node, gen in G.nodes(data="gen"):
print('node:', node, 'gen:', gen)
for node, gen in G.nodes("gen"):
print('node:', node, 'gen:', gen)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.