graphtool有一种投影二部图的方法吗?

2024-09-24 02:26:38 发布

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

我想把一个二部图投影成两个单模图。你知道吗

我想用对偶投影方法分析一个二部图。我一直在使用NetworkX,但我想尝试图形工具,因为它声称更有效。有可能我的图会很快变大,所以我想使用最有效的方法/包。包图工具声称效率更高,我想尝试一下,但我找不到一种方法来投影一个二部图使用它。有人知道这是否可以使用图形工具吗?我发现的唯一信息是,创建者要求问过类似问题的人创建一张罚单,这样他/他们就可以开始工作了,但这是从2014年开始的。你知道吗


Tags: 工具方法networkx信息图形罚单创建者投影
1条回答
网友
1楼 · 发布于 2024-09-24 02:26:38

我也遇到了同样的问题,找到了解决办法。我已经让它在多达500万个节点的图上工作。你知道吗

主要包括三个步骤:

  1. 使用is\u二部函数生成每个顶点所属的布尔数组。你知道吗
  2. 在要删除的集合上循环,在所有相邻组合之间添加边。你知道吗
  3. 使用GraphView生成一个新的图,只保留感兴趣集的节点。你知道吗
g = gt.lattice([5,5])
is_biparitite, part = gt.is_bipartite(g, partition=True)
gt.graph_draw(g, vertex_fill_color=part)  # to view the full graph coloured by set

from itertools import combinations

g_temp = g.copy()  # this is a deepcopy

for v, bipartite_label in enumerate(part):
    if bipartite_label == 0:
        neighbours = list(g.vertex(v).all_neighbours())

        for s, t in combinations(neighbours, 2):
            g_temp.add_edge(s, t)

g_projected = gt.Graph(gt.GraphView(g_temp, vfilt=part.a==1), prune=True)

gt.graph_draw(g_projected)

相关问题 更多 >