Indexing Julia/Graphs.jl:使用graph()和参数创建图形
我正在尝试使用Graphs.jl模块从Julia中的graph中获取子图。 我有一个图,我将他的顶点和边存储到列表中,然后我的算法在这个列表中移动,删除不属于新子图的节点和边。对于这一部分,一切都正常工作,在整个算法之后,剩下的就是数组子顶点类型:Graphs.ExVertex[]和数组子顶点类型:Graphs.ExEdge{Graphs.ExVertex}[] 在整个函数的末尾,我想创建子图,因此我使用:Indexing Julia/Graphs.jl:使用graph()和参数创建图形,indexing,graph,julia,Indexing,Graph,Julia,我正在尝试使用Graphs.jl模块从Julia中的graph中获取子图。 我有一个图,我将他的顶点和边存储到列表中,然后我的算法在这个列表中移动,删除不属于新子图的节点和边。对于这一部分,一切都正常工作,在整个算法之后,剩下的就是数组子顶点类型:Graphs.ExVertex[]和数组子顶点类型:Graphs.ExEdge{Graphs.ExVertex}[] 在整个函数的末尾,我想创建子图,因此我使用: sub_g = graph(sub_vertices, sub_edges, is_di
sub_g = graph(sub_vertices, sub_edges, is_directed=false)
但是我得到了Bounds()错误。
有什么想法吗?我所知道的问题是边缘
我试着跑:
sub_g = graph(sub_vertices, Graphs.ExEdge{Graphs.ExVertex}[], is_directed=false)
它运行正常。它使用数组子_顶点给定的顶点创建图形。添加带有子_边的边时出现问题
其他信息:
顶点和边是原始图形的精确副本。这意味着索引、标签等属性。。。与原始图形中的相同。我认为顶点的索引可能会有问题,但这不是因为当我运行时
sub_g = graph(sub_vertices, Graphs.ExEdge{Graphs.ExVertex}[], is_directed=false)
它运行正常。在打印顶点后,它们有索引,例如1,3,5,但看起来还可以。所以我不知道为什么边会给出边界错误。使用图构造函数来获取子图可能不是一个好主意。我不太熟悉Graphs.jl,但我在Julia中使用过Graphs 构造函数可能会将新索引分配给子顶点。因此,如果子顶点是[5,6,9],例如,新图形仍将使用[1,2,3]。如果边列表是[5=>6,6=>9,9=>5],您会注意到没有一条边是有效的,因为子图只有顶点[1,2,3] 我建议您使用专用子图方法,分两个阶段完成您要完成的工作:
julia> using Graft
julia> g = completegraph(10)
Graph(10 vertices, 90 edges, Symbol[] vertex properties, Symbol[] edge properties)
julia> sg = subgraph(g, [5,6,9], [5=>6, 6=>9, 9=>5])
Graph(3 vertices, 3 edges, Symbol[] vertex properties, Symbol[] edge properties)
julia> vertices(sg)
1:3
julia> edges(sg)
3-element Graft.EdgeIter:
1=>2
2=>3
3=>1
或者如果希望顶点保留其原始标签
julia> g = completegraph(10)
Graph(10 vertices, 90 edges, Symbol[] vertex properties, Symbol[] edge properties)
julia> setlabel!(g, collect(1:10)) # Label the vertices
julia> sg = subgraph(g, [5,6,9], [5=>6, 6=>9, 9=>5])
Graph(3 vertices, 3 edges, Symbol[] vertex properties, Symbol[] edge properties)
julia> encode(sg)
3-element Array{Int64,1}:
5
6
9
julia> encode(sg, edges(sg))
3-element Array{Pair{Int64,Int64},1}:
5=>6
6=>9
9=>5
是否有理由使用
Graphs.jl
,或者您愿意使用LightGraphs.jl
解决方案?是的,但我找到了另一种解决方案。这是一个问题,由索引引起,我认为解决方案甚至不存在。明白了。你能把你的解决方案作为一个答案吗,以防将来人们会遇到同样的问题?这不是如何正确编写这种构造方法的解决方案,而是如何从图中轻松获取子图的解决方案或我想说的变通方法。我一到家就把它寄出去:-)