python-igraph API 参考

python-igraph 中所有类、函数和方法的列表

类文档

表示图中顶点序列的类。

此类最容易通过以下方式访问vsGraph 对象的字段,它返回图中所有顶点的有序序列。可以通过调用 VertexSeq.select() 方法来优化顶点序列。 VertexSeq.select() 也可以通过简单地调用 VertexSeq 对象来访问。

创建引用给定图的顶点序列的另一种方法是直接使用构造函数

>>> g = Graph.Full(3)
>>> vs = VertexSeq(g)
>>> restricted_vs = VertexSeq(g, [0, 1])

可以通过索引顶点序列对象来访问各个顶点。它也可以用作可迭代对象,甚至可以在列表推导中使用

>>> g=Graph.Full(3)
>>> for v in g.vs:
...   v["value"] = v.index ** 2
...
>>> [v["value"] ** 0.5 for v in g.vs]
[0.0, 1.0, 2.0]

顶点集也可以用作字典,其中键是属性名称。与键对应的值是该序列选择的每个顶点的给定属性的值。

>>> g=Graph.Full(3)
>>> for idx, v in enumerate(g.vs):
...   v["weight"] = idx*(idx+1)
...
>>> g.vs["weight"]
[0, 2, 6]
>>> g.vs.select(1,2)["weight"] = [10, 20]
>>> g.vs["weight"]
[0, 10, 20]

如果指定的序列比 VertexSeq 中的顶点数短,则该序列将被重用

>>> g = Graph.Tree(7, 2)
>>> g.vs["color"] = ["red", "green"]
>>> g.vs["color"]
['red', 'green', 'red', 'green', 'red', 'green', 'red']

甚至可以传递单个字符串或整数,它将被视为长度为 1 的序列

>>> g.vs["color"] = "red"
>>> g.vs["color"]
['red', 'red', 'red', 'red', 'red', 'red', 'red']

顶点序列的某些方法只是 Graph 对象中相应方法的代理方法。一个这样的例子是VertexSeq.degree():

>>> g=Graph.Tree(7, 2)
>>> g.vs.degree()
[2, 3, 3, 1, 1, 1, 1]
>>> g.vs.degree() == g.degree()
True
方法 __call__ select() 的简写符号
方法 attributes 返回与此顶点序列关联的图中所有顶点属性的列表。
方法 find 返回顶点序列中第一个匹配某些条件的顶点。
方法 select 根据某些条件选择顶点序列的子集

继承自 VertexSeq

方法 __new__ 创建并返回一个新对象。有关准确的签名,请参见 help(type)。
方法 attribute_names 返回图的顶点的属性名称列表
方法 get_attribute_values 返回列表中所有顶点的给定顶点属性的值。
方法 set_attribute_values 设置所有顶点的给定顶点属性的值
方法 _reindex_names 重新创建将顶点名称映射到 ID 的字典。
def __call__(self, *args, **kwds):

select() 的简写符号

此方法只是将其所有参数传递给 VertexSeq.select()

def attributes(self):

返回与此顶点序列关联的图中所有顶点属性的列表。

def find(self, *args, **kwds):

返回顶点序列中第一个匹配某些条件的顶点。

选择标准与 VertexSeq.select 允许的标准相同。有关更多详细信息,请参见 VertexSeq.select

例如,要查找名称为foo在图中g:

>>> g.vs.find(name="foo")            #doctest:+SKIP

要查找任意孤立顶点

>>> g.vs.find(_degree=0)             #doctest:+SKIP
def select(self, *args, **kwds):

根据某些条件选择顶点序列的子集

可以通过位置参数和关键字参数来指定选择标准。位置参数始终在关键字参数之前处理。

  • 如果第一个位置参数是None,则返回一个空序列。
  • 如果第一个位置参数是可调用对象,则将为序列中的每个顶点调用该对象。如果它返回True,则将包括该顶点,否则将排除该顶点。
  • 如果第一个位置参数是可迭代对象,则它必须返回整数,并且它们将被视为当前顶点集的索引(不是图的整个顶点集 - 当一个顶点集已经被先前调用 VertexSeq.select() 过滤时,此差异很重要。在这种情况下,索引不直接引用图的顶点,而是引用过滤后的顶点序列的元素。
  • 如果第一个位置参数是整数,则预计所有剩余参数都是整数。它们再次被视为当前顶点集的索引。

关键字参数可用于根据顶点的属性过滤顶点。关键字的名称指定属性的名称和过滤运算符,它们应通过下划线 (_) 字符连接。属性名称也可以包含下划线,但运算符名称不包含,因此运算符始终是不包含下划线的关键字名称的最大尾随子字符串。可能的运算符是

  • eq:等于
  • ne:不等于
  • lt:小于
  • gt:大于
  • le:小于或等于
  • ge:大于或等于
  • in:检查属性的值是否在给定列表中
  • notin:检查属性的值是否不在给定列表中

例如,如果要过滤具有大于 200 的数字age属性的顶点,则必须编写

>>> g.vs.select(age_gt=200)                   #doctest: +SKIP

类似地,要过滤type是否在预定义类型列表中的顶点

>>> list_of_types = ["HR", "Finance", "Management"]
>>> g.vs.select(type_in=list_of_types)        #doctest: +SKIP

如果省略运算符,则默认为eq。例如,以下选择器选择cluster属性等于 2 的顶点

>>> g.vs.select(cluster=2)                    #doctest: +SKIP

在未知运算符的情况下,假定识别的运算符是属性名称的一部分,并且实际运算符是eq.

如果从关键字参数推断出的属性名称以下划线 (_) 开头,则会受到特殊处理。这些不是真正的属性,而是指顶点的特定属性,例如,其度数。规则如下:如果属性名称以下划线开头,则名称的其余部分将被解释为 Graph 对象的方法。将使用顶点序列作为其第一个参数调用此方法(所有其他参数保留默认值),并根据该方法返回的值过滤顶点。例如,如果要排除孤立顶点

>>> g = Graph.Famous("zachary")
>>> non_isolated = g.vs.select(_degree_gt=0)

对于需要很长时间才能计算的属性(例如,大型图的介数中心性),建议提前计算值并将其存储在图属性中。当在同一个select()调用中多次基于同一属性进行选择时,也适用相同的规则,以避免不必要地计算两次。例如,以下代码将计算两次介数中心性

>>> edges = g.vs.select(_betweenness_gt=10, _betweenness_lt=30)

建议使用以下代码代替

>>> g.vs["bs"] = g.betweenness()
>>> edges = g.vs.select(bs_gt=10, bs_lt=30)
返回值
新的、过滤后的顶点序列