python-igraph 手册

用于从 Python 使用 igraph

图的生成

图的生成

大多数 igraph 应用程序的第一步是生成图。本节将介绍多种生成图的方法。请阅读 API 文档 以获取每个函数和类的详细信息。

Graph 类是用于生成图的主要对象

>>> from igraph import Graph

要复制图,请使用 Graph.copy()

>>> g_new = g.copy()

从节点和边

节点始终从 0 开始编号。要创建具有指定节点数(例如 10)和节点之间边列表的通用图,可以使用通用构造函数

>>> g = Graph(n=10, edges=[[0, 1], [2, 3]])

如果未指定,则图是无向图。要创建有向图

>>> g = Graph(n=10, edges=[[0, 1], [2, 3]], directed=True)

要指定边的权重(或任何其他顶点/边属性),请使用字典

>>> g = Graph(
...     n=4, edges=[[0, 1], [2, 3]],
...     edge_attrs={'weight': [0.1, 0.2]},
...     vertex_attrs={'color': ['b', 'g', 'g', 'y']}
... )

要从类型列表和边列表创建二分图,请使用 Graph.Bipartite()

从 Python 内置结构(列表、元组、字典)

igraph 支持多种“转换”方法,可以从 Python 内置数据结构(例如字典、列表和元组)导入图

可以使用等效的方法导出图,即,将图转换为使用 Python 内置数据结构的表示形式

有关详细信息和示例,请参阅每个函数的 API 文档

从矩阵

要从邻接矩阵创建图,请使用 Graph.Adjacency(),对于加权矩阵,请使用 Graph.Weighted_Adjacency()

>>> g = Graph.Adjacency([[0, 1, 1], [0, 0, 0], [0, 0, 1]])

此图是有向图,并具有边 [0, 1][0, 2][2, 2](一个自环)。

要从关联矩阵创建二分图,请使用 Graph.Incidence()

>>> g = Graph.Incidence([[0, 1, 1], [1, 1, 0]])

从文件

要从任何受支持格式的文件中加载图,请使用 Graph.Load()。例如

>>> g = Graph.Load('myfile.gml', format='gml')

如果未指定格式,igraph 将尝试确定格式,如果失败,则会报错。

从外部库

igraph 可以从 networkxgraph-tool 图格式读取和写入

>>> g = Graph.from_networkx(nwx)

>>> g = Graph.from_graph_tool(gt)

从 pandas DataFrame(s)

一种常见的做法是将边存储在 pandas.DataFrame 中,其中前两列是源顶点 ID 和目标顶点 ID,任何其他列表示边属性。您可以通过 Graph.DataFrame() 生成图

>>> g = Graph.DataFrame(edges, directed=False)

可以通过单独的 DataFrame 同时设置顶点属性。假定第一列包含所有顶点 ID(包括任何没有边的顶点),任何其他列是顶点属性

>>> g = Graph.DataFrame(edges, directed=False, vertices=vertices)

从公式

要从字符串公式创建图,请使用 Graph.Formula(),例如

>>> g = Graph.Formula('D-A:B:F:G, A-C-F-A, B-E-G-B, A-B, F-G, H-F:G, H-I-J')

注意

此特定公式还会为顶点分配“name”属性。

完全图

要创建完全图,请使用 Graph.Full()

>>> g = Graph.Full(n=3)

其中 n 是节点数。您可以指定有向性以及是否包含自环

>>> g = Graph.Full(n=3, directed=True, loops=True)

类似的方法 Graph.Full_Bipartite() 生成完全二分图。最后,方法 Graph.Full_Citation() 创建完全引用图,其中索引为 i 的顶点具有指向索引严格小于 i 的所有顶点的有向边。

树和星形

Graph.Tree() 可用于生成规则树,其中几乎每个顶点都具有相同数量的子节点

>>> g = Graph.Tree(n=7, n_children=2)

创建一个具有七个顶点的树 - 其中四个是叶子。根 (0) 有两个子节点(1 和 2),每个子节点有两个子节点(四个叶子)。规则树可以是有向的或无向的(默认)。

方法 Graph.Star() 创建星形图,它是树的一种子类型。

网格

Graph.Lattice() 创建所选大小的规则正方形网格。例如

>>> g = Graph.Lattice(dim=[3, 3], circular=False)

在二维中创建一个 3×3 网格(总共 9 个顶点)。circular 用于将网格的每个边连接回另一侧,该过程也称为“周期性边界条件”,有时有助于消除边缘效应。

一维情况(路径图或循环图)非常重要,值得拥有自己的构造函数 Graph.Ring(),它可以是圆形的也可以不是

>>> g = Graph.Ring(n=4, circular=False)

图谱集

Roland C. Read 和 Robin J. Wilson 的著作“An Atlas of Graphs”包含所有未标记的、最多七个顶点的无向图,编号从 0 到 1252。您可以通过索引使用 Graph.Atlas() 创建此列表中的任何图,例如

>>> g = Graph.Atlas(44)

这些图按以下顺序列出

  • 节点数递增;

  • 对于固定数量的节点,边的数量递增;

  • 对于固定数量的节点和边,度序列递增,例如 111223 < 112222;

  • 对于固定的度序列,按自同构数递增排序。

著名图

一个精选的著名图列表,这些图经常在文献中用于基准测试和其他目的,可以在 igraph C 核心手册 上找到。您可以通过名称生成该列表中的任何图,例如

>>> g = Graph.Famous('Zachary')

将教你一些关于武术的知识。

随机图

可以根据几个不同的模型或游戏创建随机图

  • Barabási-Albert 模型:Graph.Barabasi()

  • Erdős-Rényi:Graph.Erdos_Renyi()

  • Watts-Strogatz Graph.Watts_Strogatz()

  • 随机块模型 Graph.SBM()

  • 随机树 Graph.Tree_Game()

  • 森林火灾游戏 Graph.Forest_Fire()

  • 随机几何图 Graph.GRG()

  • 增长 Graph.Growing_Random()

  • 建立游戏 Graph.Establishment()

  • 偏好,建立的非增长变体 Graph.Preference()

  • 非对称偏好 Graph.Asymmetric_Prefernce()

  • 最近的度数 Graph.Recent_Degree()

  • k-规则(每个节点的度数为 k)Graph.K_Regular()

  • 边概率与节点适应度成比例的非增长图 Graph.Static_Fitness()

  • 具有规定的幂律度分布的非增长图 Graph.Static_Power_Law()

  • 具有给定度序列的随机图 Graph.Degree_Sequence()

  • 二分图 Graph.Random_Bipartite()

其他图

最后,还有一些生成图的方法不包括在前面的部分中

  • Kautz 图 Graph.Kautz()

  • De Bruijn 图 Graph.De_Bruijn()

  • 来自 LCF 表示法的图 Graph.LCF()

  • 任何“同构类”的小图 Graph.Isoclass()

  • 具有指定度序列的图 Graph.Realize_Degree_Sequence()