模块文档

igraph.Graph.Formula() 的实现。

除非您有非常充分的理由,否则不应直接使用此模块。在几乎所有情况下,您最好调用 igraph.Graph.Formula()

函数 construct_graph_from_formula Graph.Formula(formula = None, attr = "name", simplify = True)
函数 generate_edges 解析给定公式部分头部的边规范并生成以下内容
def construct_graph_from_formula(cls, formula=None, attr='name', simplify=True): (source)

Graph.Formula(formula = None, attr = "name", simplify = True)

从图公式生成图

图公式是图的一种简单字符串表示。它对于快速创建小型图非常方便。字符串由由边运算符分隔的顶点名称组成。边运算符是一系列破折号(-),可以以箭头(<在序列开头或>在序列末尾)开头,也可以不以箭头开头。边运算符可以任意长,即您可以随意使用任意数量的破折号来绘制它们。这总共有四种不同的边运算符:

  • -----创建无向边
  • <----创建从运算符右侧顶点指向左侧顶点的有向边
  • ---->与...相反<----
  • <--->在两个顶点之间创建相互有向边对

如果您只使用无向边运算符(-----),则图将是无向的。否则它将是有向的。公式中使用的顶点名称将分配给图的name顶点属性。

一些简单示例

>>> from igraph import Graph
>>> print(Graph.Formula())          # empty graph
IGRAPH UN-- 0 0 --
+ attr: name (v)
>>> g = Graph.Formula("A-B")        # undirected graph
>>> g.vs["name"]
['A', 'B']
>>> print(g)
IGRAPH UN-- 2 1 --
+ attr: name (v)
+ edges (vertex names):
A--B
>>> g.get_edgelist()
[(0, 1)]
>>> g2 = Graph.Formula("A-----------B")
>>> g2.isomorphic(g)
True
>>> g = Graph.Formula("A  --->  B") # directed graph
>>> g.vs["name"]
['A', 'B']
>>> print(g)
IGRAPH DN-- 2 1 --
+ attr: name (v)
+ edges (vertex names):
A->B

如果您有许多不连通的组件,可以用逗号分隔它们。您也可以指定孤立顶点

>>> g = Graph.Formula("A--B, C--D, E--F, G--H, I, J, K")
>>> print(", ".join(g.vs["name"]))
A, B, C, D, E, F, G, H, I, J, K
>>> g.connected_components().membership
[0, 0, 1, 1, 2, 2, 3, 3, 4, 5, 6]

冒号(:)运算符可用于指定顶点集。如果一个边运算符连接两个顶点集,则第一个顶点集中的每个顶点都将连接到第二个顶点集中的每个顶点

>>> g = Graph.Formula("A:B:C:D --- E:F:G")
>>> g.isomorphic(Graph.Full_Bipartite(4, 3))
True

请注意,如果顶点名称包含空格或特殊字符,则必须引用它们

>>> g = Graph.Formula('"this is" +- "a silly" -+ "graph here"')
>>> g.vs["name"]
['this is', 'a silly', 'graph here']
参数
cls未文档化
formula公式本身
attr存储顶点名称的顶点属性名称
simplify是否简化构建的图
返回
构建的图
def generate_edges(formula): (source)

解析给定公式部分头部的边规范并生成以下内容

  • 边的起点(或多个起点),由顶点名称指定
  • 边的终点(或多个终点),由名称指定;如果顶点是孤立的,则为空列表
  • 一对布尔值,表示在起始顶点和结束顶点处是否有箭头