获取Networkx中特定类型的节点

2024-10-01 17:22:35 发布

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

所以我用networkX图来表示一些信息。此信息由不同的对象类型(例如,ColorNode和ShapeNode)表示。在

在这个图上完成的一些处理需要我提取出一个特定类型的节点。每次我需要这样做的时候,我都会按照下面的代码做一些事情。在

colornodes = []
for node in graph.nodes():
    if isinstance(node, ColorNode):
        colornodes.append()

虽然这是可行的,但我觉得这是一个经常出现的情况,当工作与图形,我正在重新发明轮子那里。 基本上,我想知道是否有更好的方法来做这件事。在


Tags: 对象代码innetworkx信息node类型for
2条回答

而不是graph.nodes(), 您可以使用xpath。在

我建议使用另一种方法,而不是定义自己的类型并始终使用isinstance进行检查(这非常慢)。在

{a1/你可以看看这个边缘}节点。在

然而,我发现了另一个技巧,它可能对你的具体情况很有用。在

如果定义了表示节点类型的属性,则可以使用 内置的get_node_attributes函数。诀窍是它只返回真正定义属性的节点:

import networkx as nx

G = nx.complete_graph(10)
G.node[0]['ColorNode'] = True  # right-hand side value is irrelevant for the lookup
G.node[1]['ColorNode'] = True
G.node[2]['ShapeNode'] = True
G.node[3]['ShapeNode'] = True

shape_nodes = nx.get_node_attributes(G, 'ShapeNode').keys()
color_nodes = nx.get_node_attributes(G, 'ColorNode').keys()

print('Shape node ids: {}'.format(shape_nodes))
print('Color node ids: {}'.format(color_nodes))

输出:

^{pr2}$

当然,如果您的图是大的或静态的,您应该保留id列表以便快速查询!在

相关问题 更多 >

    热门问题