无法在networkx中分配随机节点属性



我想生成10个具有不同节点属性但具有相同底层配置(4个节点和相同边缘安排)的随机图。随机性只与节点属性的值相关联。

每个节点有两个属性:expertise_level和innovation_level。目标是有10个图,每个图都有这两个属性的随机值集(高/中/低)。


import numpy as np
import networkx as nx
masterG = [] #to store generated graphs in a list
G = nx.path_graph(4) #creating a specific 4-node graph configuration
def randompicking(levels = ["High", "Medium", "Low"]):
abc = np.random.choice(levels, len(list(G)), replace = True, p=[0.33, 0.33, 0.34])
return abc.tolist()
def initializeG():
expertise_level  = dict(list(enumerate(randompicking())))
innovation_level = dict(list(enumerate(randompicking())))

nx.set_node_attributes(G, expertise_level,  'expertise_level')
nx.set_node_attributes(G, innovation_level, 'innovation_level')
for i in range(10):
initializeG()
masterG.append(G)
masterG

问题:当我手动运行代码来生成每个图通过解压缩代码在initializeg()和移动代码在这个函数之外(即,不创建这个函数,但在全局环境中使用内部代码),生成的节点属性是随机的(唯一的)在每个图所需的。但是,当我像上面那样使用函数initializeG()运行代码时,为每个图(存储在masterG中)中的每个节点生成的节点属性是完全相同的。

谁能解释一下代码哪里出错了?

当你重用你的图形时,这里有一个唯一的图形。查看ID是如何相同的:

[<networkx.classes.graph.Graph at 0x7f3500c7e9d0>,
<networkx.classes.graph.Graph at 0x7f3500c7e9d0>,
...
<networkx.classes.graph.Graph at 0x7f3500c7e9d0>,
<networkx.classes.graph.Graph at 0x7f3500c7e9d0>]

你需要新建一个每次调用initializeG:

import numpy as np
import networkx as nx
masterG = [] #to store generated graphs in a list
def randompicking(levels = ["High", "Medium", "Low"]):
abc = np.random.choice(levels, len(list(G)), replace = True, p=[0.33, 0.33, 0.34])
return abc.tolist()
def initializeG():
G = nx.path_graph(4) #creating a specific 4-node graph configuration
expertise_level  = dict(list(enumerate(randompicking())))
innovation_level = dict(list(enumerate(randompicking())))

nx.set_node_attributes(G, expertise_level,  'expertise_level')
nx.set_node_attributes(G, innovation_level, 'innovation_level')
return G
for i in range(10):
G = initializeG()
masterG.append(G)

输出(现在id不同,每个图是一个不同的对象):

[<networkx.classes.graph.Graph at 0x7f3500ab4b80>,
<networkx.classes.graph.Graph at 0x7f3500ab47c0>,
<networkx.classes.graph.Graph at 0x7f3500ab4970>,
<networkx.classes.graph.Graph at 0x7f3500c45160>,
<networkx.classes.graph.Graph at 0x7f3500c452b0>,
<networkx.classes.graph.Graph at 0x7f3500c45040>,
<networkx.classes.graph.Graph at 0x7f35009536d0>,
<networkx.classes.graph.Graph at 0x7f3500c45220>,
<networkx.classes.graph.Graph at 0x7f3500c45430>,
<networkx.classes.graph.Graph at 0x7f3500c45400>]

最新更新