如何用Python从度列表生成匹配度序列的随机邻接矩阵?
高效实现给定度序列生成随机邻接矩阵(Python版)
方案一:利用python-igraph内置方法
python-igraph中存在对应功能,只是函数名和R版不同,可通过以下两个方法实现:
Graph.Degree_Sequence(deg_sequence, method="vl"):基于Viger-Latapy算法生成无环无重边的简单图,仅在度序列可行时生效Graph.Random_Degree_Sequence(deg_sequence):生成允许自环和重边的随机图,适配更多度序列场景
示例代码:
from igraph import Graph import numpy as np # 示例度序列 deg_seq = [3, 3, 2, 2, 1, 1] # 生成无环无重边的简单图 graph = Graph.Degree_Sequence(deg_seq) # 转换为邻接矩阵 adj_matrix = np.array(graph.get_adjacency().data) print(adj_matrix)
方案二:使用NetworkX库
若偏好NetworkX生态,可通过configuration_model()高效生成对应度序列的随机图,还能灵活控制是否允许自环和重边:
import networkx as nx import numpy as np deg_seq = [3, 3, 2, 2, 1, 1] # 生成基础随机图(可能含自环/重边) G = nx.configuration_model(deg_seq, seed=42) # 转换为简单图并移除自环 G = nx.Graph(G) G.remove_edges_from(nx.selfloop_edges(G)) # 转换为邻接矩阵 adj_matrix = nx.to_numpy_array(G) print(adj_matrix)
注意:可先通过nx.is_graphical(deg_seq)校验度序列是否能构成简单图,避免生成不符合预期的结果。
性能说明
- python-igraph底层基于C实现,处理大规模度序列时速度远快于纯Python代码
- NetworkX的
configuration_model()经过优化,在中等规模数据集上表现稳定
内容的提问来源于stack exchange,提问作者Qise
相关产品推荐
相关产品推荐

