[英]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.