类文档

表示图中顶点序列的类。

此类的最便捷访问方式是使用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

方法 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: 检查属性值是否不在给定列表中

例如,如果您想过滤具有数值age属性且值大于 200 的顶点,您必须编写

>>> 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)
返回
新的、已过滤的顶点序列