首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Julia / Graphs.jl :使用图()和参数创建图

Julia / Graphs.jl :使用图()和参数创建图
EN

Stack Overflow用户
提问于 2016-03-19 13:09:52
回答 1查看 392关注 0票数 4

我正在尝试使用Graphs.jl模块从Julia中的图中获取子图。我有图,我将他的顶点和边存储到列表中,然后我的算法在这个列表中移动,删除不属于新子图的节点和边。对于这一部分,所有工作正常,在整个算法后,剩下的是数组sub_vertices 类型: Graphs.ExVertex[]和数组sub_edges 类型:Graphs.ExVertex[]

在整个函数的末尾,我将创建子图,因此我使用:

代码语言:javascript
复制
sub_g = graph(sub_vertices, sub_edges, is_directed=false)

但是我得到了界()错误。知道吗?我只知道问题在边缘。

我试着逃跑

代码语言:javascript
复制
sub_g = graph(sub_vertices, Graphs.ExEdge{Graphs.ExVertex}[], is_directed=false)

一切正常。它用数组sub_vertices.给出的顶点创建图。使用sub_edges添加边时会出现问题。

附加信息:顶点和边是原始图的精确副本。这意味着像索引,标签,.和原图一样。我想也许顶点的索引会有问题,但这并不是因为当我运行时,

代码语言:javascript
复制
sub_g = graph(sub_vertices, Graphs.ExEdge{Graphs.ExVertex}[], is_directed=false)

它运转正常。在打印顶点之后,他们有索引,例如,1,3,5,但似乎没问题。所以我不知道为什么边会出现边界错误。

EN

回答 1

Stack Overflow用户

发布于 2016-08-25 10:47:04

使用图构造函数获取子图可能不是个好主意。我对Graphs.jl不太熟悉,但我用过朱莉娅的图表。

构造函数可能会为sub_vertices分配新的索引。例如,如果sub_vertices是5,6,9,那么新的图形仍然使用1,2,3。如果您的边列表是5=>6、6=>9、9=>5,您会注意到没有一个边是有效的,因为子图只有顶点1,2,3

我建议您使用专门的子图方法来完成您想要完成的任务,分两个阶段:

  1. 首先,使用您隔离的sub_edges计算一个子图。
  2. 接下来,使用sub_vertices计算一个子图。

Graft.jl有一个方法,允许您同时执行这两项操作:

代码语言:javascript
复制
  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

或者如果你想让顶点保留它们原来的标签

代码语言:javascript
复制
  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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36102141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档