Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 顶点收缩-python_Python 3.x_Networkx_Vertex - Fatal编程技术网

Python 3.x 顶点收缩-python

Python 3.x 顶点收缩-python,python-3.x,networkx,vertex,Python 3.x,Networkx,Vertex,我有一个子图,其中包含一些连接的组件,如下所示: 我正在使用 bicomponents = list(nx.biconnected_components(T)) 标识子图中所有连接的组件。我需要移除整个连接的组件,并将该组件收缩到一个顶点,然后得到一个新的叶子。例如,我需要删除组件{28,30,31},并引入一个新的顶点51(我有n=50个顶点,所以新的顶点将是51),并与29连接以获得新的叶子 有人能帮我吗?要收缩双连接组件,我们将首先重新标记每个组件中的节点,使它们具有相同的标签,然后删

我有一个子图,其中包含一些连接的组件,如下所示:

我正在使用

bicomponents = list(nx.biconnected_components(T))
标识子图中所有连接的组件。我需要移除整个连接的组件,并将该组件收缩到一个顶点,然后得到一个新的叶子。例如,我需要删除组件
{28,30,31}
,并引入一个新的顶点
51
(我有
n=50
个顶点,所以新的顶点将是
51
),并与
29
连接以获得新的叶子


有人能帮我吗?

要收缩双连接组件,我们将首先重新标记每个组件中的节点,使它们具有相同的标签,然后删除自循环

构造标签映射 在这里,我做了两个假设:我们丢弃无关紧要的双连接组件(因此,
过滤器
,如果不需要,可以很容易地移除),如果一个节点属于两个双连接组件(切割顶点),我们不会将这两个组件收缩为单个节点,而是为两个组件保留两个节点。如果这不是期望的行为,我们需要合并具有公共节点的组件,其解决方案在中

把部件包起来
label_mapping = {}
for idx, node_component in enumerate(filter(lambda s: len(s) > 2, nx.biconnected_components(g)), start=len(g) + 1):
    for node in node_component:
        if node not in label_mapping:
            label_mapping[node] = idx
h = nx.relabel_nodes(g, label_mapping)
h.remove_edges_from(h.selfloop_edges())