graph_tool属性映射是否适用于GraphWiews?

时间:2017-09-29 21:08:28

标签: python graph-tool

当基本图形本身是GraphView对象时,python graph_tool包中的GraphView对象似乎无法正常工作。以下是一些显示问题的代码:

from graph_tool import *
import numpy as np

g = Graph()
p1 = g.new_vertex_property("bool")
gv1 = GraphView(g, p1)
p2 = gv1.new_vertex_property("bool")
gv2 = GraphView(gv1, p2)

print gv1.num_vertices()

按预期打印0;我们还没有添加任何顶点。

v = g.add_vertex()
p1[v] = True
print gv1.num_vertices()

按预期打印1。更改属性映射会更新视图。

for w in gv1.vertices():
    p2[w] = True
print gv2.num_vertices()

这打印0,我没想到。更改属性映射似乎不会更新视图。

p2[v] = True
print gv2.num_vertices()

使用g而不是gv1的顶点对象似乎没有帮助;再次打印0。

gv2 = GraphView(gv1, p2)
print gv2.num_vertices()

这打印1,表明问题不是属性映射,而是某种方式,视图。

我错过了什么?

1 个答案:

答案 0 :(得分:1)

当GraphView对象编组时,即从另一个GraphView对象生成时,需要使用numpy.logical_and()组合底层属性映射,这意味着需要复制< / em>的。因此,在您的示例中,gv2使用的内部属性映射将是p2p1结合的副本,因此如果您修改p1 1}}或p2,它会在创建后不再影响gv2

如果您想更改gv2使用的地图,可以使用gv2.get_edge_filter()获取地图。