当基本图形本身是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,表明问题不是属性映射,而是某种方式,视图。
我错过了什么?
答案 0 :(得分:1)
当GraphView对象编组时,即从另一个GraphView对象生成时,需要使用numpy.logical_and()
组合底层属性映射,这意味着需要复制< / em>的。因此,在您的示例中,gv2
使用的内部属性映射将是p2
与p1
结合的副本,因此如果您修改p1
1}}或p2
,它会在创建后不再影响gv2
。
如果您想更改gv2
使用的地图,可以使用gv2.get_edge_filter()
获取地图。