class VertexSeq(_VertexSeq)
表示图中顶点序列的类。
此类最容易通过以下方式访问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 |
返回图的顶点的属性名称列表 |
方法 | get |
返回列表中所有顶点的给定顶点属性的值。 |
方法 | set |
设置所有顶点的给定顶点属性的值 |
方法 | _reindex |
重新创建将顶点名称映射到 ID 的字典。 |
返回顶点序列中第一个匹配某些条件的顶点。
选择标准与 VertexSeq.select
允许的标准相同。有关更多详细信息,请参见 VertexSeq.select
。
例如,要查找名称为foo在图中g:
>>> g.vs.find(name="foo") #doctest:+SKIP
要查找任意孤立顶点
>>> g.vs.find(_degree=0) #doctest:+SKIP
根据某些条件选择顶点序列的子集
可以通过位置参数和关键字参数来指定选择标准。位置参数始终在关键字参数之前处理。
- 如果第一个位置参数是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)
返回值 | |
新的、过滤后的顶点序列 |