如何为leidenalg检测到的子图制作邻接矩阵

How to make adjacency matrix for sub-graphs detected by leidenalg

我需要为 leidenalg 检测到的每个社区(子图)制作邻接矩阵;但问题是 find_partition() 的输出只是显示每个子图中的节点。有什么方法可以将输出转换为 np.array 之类的带有每个子图边缘信息的东西吗??

import leidenalg
import igraph as ig

G = ig.Graph.Erdos_Renyi(10, 0.1);
partitions = leidenalg.find_partition(G, leidenalg.ModularityVertexPartition)
print(partitions)

输出:

Clustering with 10 elements and 3 clusters
[0] 2, 5, 8, 9
[1] 3, 4, 6
[2] 0, 1, 7

您可以通过简单地构造子图并计算邻接矩阵来完成此操作。您的示例不太可重现,因为 ig.Graph.Erdos_Renyi 使用随机数生成器。因此,我添加了一些代码来设置随机种子并生成类似于您的图表,但可重现性除外。我只是得到了第一个分区的邻接矩阵,当然,你可以遍历分区并得到所有的矩阵。

import igraph as ig
import leidenalg
import random

random.seed(a=321)
G = ig.Graph.Erdos_Renyi(10, 0.28);
partitions = leidenalg.find_partition(G, leidenalg.ModularityVertexPartition)
print(partitions)

P0 = G.subgraph(partitions[0])
P0.get_adjacency()

Out[15]: Matrix([[0, 1, 1, 0], [1, 0, 1, 1], [1, 1, 0, 1], [0, 1, 1, 0]])