graph_tool 属性 地图在 GraphViews 中工作吗?
Do graph_tool property maps work in GraphViews?
当基础图本身是一个 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,表明问题不在于 属性 地图,而在于视图。
我错过了什么?
当 GraphView objets composed,即从另一个 GraphView 对象生成时,需要使用 numpy.logical_and()
组合底层 属性 映射,这意味着需要复制。因此,在您的示例中,gv2
使用的内部 属性 映射将是 copy p2
与 p1
的组合,因此如果您修改 p1
或 p2
,它在创建后将不再影响 gv2
。
如果你想改变gv2
使用的地图,你可以通过gv2.get_edge_filter()
获得它。
当基础图本身是一个 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,表明问题不在于 属性 地图,而在于视图。
我错过了什么?
当 GraphView objets composed,即从另一个 GraphView 对象生成时,需要使用 numpy.logical_and()
组合底层 属性 映射,这意味着需要复制。因此,在您的示例中,gv2
使用的内部 属性 映射将是 copy p2
与 p1
的组合,因此如果您修改 p1
或 p2
,它在创建后将不再影响 gv2
。
如果你想改变gv2
使用的地图,你可以通过gv2.get_edge_filter()
获得它。