关于添加一个节点/边缘/属性的单行,有很多关于此的信息,但我正在寻找允许我使用属性分配100个节点(以及最终边缘)的循环等
例如,有图G,包含100个节点
我想给每个节点一个值,但这不起作用:
G = nx.Graph()
G.add_nodes_from(range(1,101))
G_node_atts = range(0,100)
G_na = nx.path_graph(G_node_atts)
G.add_edges_from(G_na.edges())
导致:
G.nodes(data=True)
NodeDataView({0: {}, 1: {}, 2: {}, 3: {}, 4: {}, 5: {},
... etc.
G.edges(data=True)
EdgeDataView([(0, 1, {}), (1, 2, {}), (2, 3, {}), (3, 4, {}),
... etc.
我希望节点属性看起来像:
[(1, {'id':0}),(2, {'id':1}), etc.]
非常感谢任何帮助。
编辑:答案非常有用,并返回所需的结果。 但是,如果我有几个节点类型,请说节点A,B和C,我希望它们都包含0到3之间的属性值。
( {1: {'A': 0}, 2: {'A': 1}, 3: {'A': 2}, 4: {'A': 3} )
( {5: {'B': 0}, 6: {'B': 1}, 7: {'B': 2}, 8: {'B': 3} )
( {9: {'C': 0}, 10: {'C': 1}, 11: {'C': 2}, 12: {'C': 3} )
我是否需要某种嵌套for循环?
(我的总体目标是拥有一个有点大的图形(可能是400.000个节点),它可以包含几种类型的节点(比如20),这些节点通过函数可以在它们之间生成边缘(以及属性,边缘权重等)。 )。)
答案 0 :(得分:0)
您可以尝试以下操作:
G = nx.Graph()
for attr in range(100):
G.add_node(attr+1, id=attr)
[编辑]
您可以构建一个类似node_types = {1: 'A', 2: 'A', 3: 'A', ...}
的目录,其中每个节点都有其类型,然后:
G = nx.Graph()
for attr in range(100):
node = attr + 1
G.add_node(node, node_type={node_types[node]: attr%4})