GraphView边过滤和顶点过滤后的原始Graph一样

GraphView edge filter is same as original Graph after vertex filtering

我有一个 Graph 和一个关联的边 属性。然后,我使用带有 GraphView.

的顶点过滤器过滤图形
g = Graph(directed=False)
g.add_vertex(6)
g.add_edge_list([(0, 1), (1, 2), (1, 4), (2, 4), (3, 5), (4, 5)])
eprop = g.new_edge_property('int')
eprop.a = numpy.random.randint(0, 10, g.num_edges())

vfilt = g.new_vertex_property('bool')
vfilt.a[[0, 1, 2, 4]] = True
h = GraphView(g, vfilt=vfilt)

在这个例子中,原始图有预期的 6 个顶点和 6 个边。

<Graph object, undirected, with 6 vertices and 6 edges at 0x1f9149550>

视图有 4 个顶点和 4 条边。

<GraphView object, undirected, with 4 vertices and 4 edges, edges filtered by (<PropertyMap object with key type 'Edge' and value type 'bool', for Graph 0x209b4f7f0, at 0x182ea70f0>, False), vertices filtered by (<PropertyMap object with key type 'Vertex' and value type 'bool', for Graph 0x209b4f7f0, at 0x14a00a710>, False) at 0x209b4f7f0>

我的最终objective是为h中存在的边获取eprop的值。一种简单快捷的方法是在 eprop.a 上使用布尔数组索引。我以为我可以为此使用视图的边缘过滤器,但它的行为并不像我预期的那样。

h.get_edge_filter()returns一个PropertyMap

(<PropertyMap object with key type 'Edge' and value type 'bool', for Graph 0x209b4f7f0, at 0x182ea70f0>,
 False)

h.get_edge_filter()[0].a显示所有值都是True

PropertyArray([1, 1, 1, 1, 1, 1], dtype=uint8)

我是不是做错了什么,或者我期望的行为是我不应该做的?

是否有更快的方法来获取一组顶点之间所有边的边 属性 值?

筛选后的图表会出现这种行为。 .a 属性总是 returns 底层数组,它还包含未过滤的值。要仅访问过滤后的值,您应该改用 .fa 属性。

此处的文档对此进行了解释:https://graph-tool.skewed.de/static/doc/graph_tool.html#graph_tool.PropertyMap.fa