仅当具有相同属性的节点不存在时将节点添加到网络x

2024-10-01 11:20:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我对networkx和图形非常陌生,希望你的帮助。在

我正在设计一个图,其中每个节点都有一个node_id(这是我要迭代生成图形的点数)和五个属性。在

G.add_node(node_id)
G[id]['Coord1'] = 3
G[id]['Coord2'] = 7
G[id]['Coord3'] = None
G[id]['Coord4'] = None
G[id]['Coord5'] = None

现在我想考虑添加一个新的节点,带有一些坐标。在

现在在向我的图中添加一个新节点之前,我要检查是否已经有一个节点具有与我要添加的节点相同的属性(其中一个坐标)。在

如果已经存在一个具有共享坐标的节点,那么我不会添加新节点,而只是对现有节点进行一些更改。在

我能想到的唯一方法是循环遍历图中所有现有的节点,并检查其中一个属性是否与我打算添加的节点相同。E、 g

^{pr2}$

其中tempcoord是我要添加的节点上的相关坐标。在

这显然非常低效,每次我想添加节点都要检查所有现有节点,我的问题是:有没有更好的方法?在

我知道networkx不会添加具有相同id的新节点,但不会扩展到共享相同属性的节点,对吗?在

或者,在我添加了所有这些“重复”节点之后,是不是更好地构建包含所有这些“重复”节点的图,然后将具有某些共享属性的所有节点压缩为一个节点?在

很抱歉我的解释有些复杂,我希望这是有意义的。在


Tags: 方法networkxnoneaddidnode图形属性
1条回答
网友
1楼 · 发布于 2024-10-01 11:20:51

创建一个包含所有观察到的节点属性的集。如果要添加具有给定属性的节点,请检查该属性是否存在。如果是,则不做任何操作,但如果没有,则添加它并将属性放入集合中。如果在代码的不同部分完成这些步骤,那么定义一个函数来完成这些步骤可能是值得的。在

seen_attributes = set()

# code here adding nodes

node = node_to_add
attribute = attribute_of_node

if attribute not in seen_attributes:
    G.add_node(node, coord=attribute)
    seen.add(attribute)

相关问题 更多 >