indexing - Julia /Graphs.jl : creating graph using graph() and arguments

标签 indexing graph julia

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

在整个函数的末尾,我想创建子图,所以我使用:

sub_g = graph(sub_vertices, sub_edges, is_directed=false)

但是我收到Bounds() 错误。 任何想法 ?我只知道问题出在边缘。

我尝试运行:

sub_g = graph(sub_vertices, Graphs.ExEdge{Graphs.ExVertex}[], is_directed=false)

并且运行正常。它使用数组sub_vertices给定的顶点创建图形。使用 sub_edges 添加边时会出现问题。

其他信息: 顶点和边是原始图的精确副本。这意味着索引、标签等属性与原始图中相同。我认为也许顶点索引会出现问题,但这并不是因为当我运行时,

sub_g = graph(sub_vertices, Graphs.ExEdge{Graphs.ExVertex}[], is_directed=false)

运行正常。打印顶点后,它们有索引,例如 1,3,5,但看起来没问题。所以我不知道为什么边缘会产生边界错误。

最佳答案

使用图构造函数来获取子图可能不是一个好主意。我不太熟悉 Graphs.jl,但我曾在 Julia 中使用过图表。

构造函数可能会为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有一个方法可以让您同时执行这两项操作:

  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

关于indexing - Julia /Graphs.jl : creating graph using graph() and arguments,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36102141/

相关文章:

javascript - VivaGraphJS 删除链接

iphone - 图表中的文字换行

java - 有向图和无向图 - Java

vim - 在 Vim 中为 Julia 突出显示语法的简单方法

indexing - 为什么这个谓词留下一个选择点?

postgresql - Postgres缓存(shared_buffers)数据是按照索引排序的吗?

plot - 如何在 Julia 中制作对数图?

c - 不可变的 julia 结构是否可以安全地进行变异,在什么条件下可以安全地进行变异?

MySQL - 经常更新的列上的全文索引

python - 从变量中的索引获取 numpy 数组中的值