本节通过与 LightGraphs.jl(一个前沿的 Julia 图库[4])进行基准测试,提供支持该主张的实证证据。 LightGraphs 的性能优于用 C++ 编写的图库,并远胜于流行的 Python 图库 NetworkX[14]。 基准测试结果如图 7 所示,其性能已按 Julia 当前最优水平(LightGraphs/MetaGraphs)的时间归一化。用于生成这些基准测试的代码可在 GitHub 上获取。 基准测试表明,无需大量优化努力,且 acset 核心不包含任何图特定代码的情况下,acset 的性能通常可与 LightGraphs 相媲美,多数情况下差距在两倍以内。 然而,当我们与 MetaGraphs.jl(一个常用于为 LightGraphs 图附加数据属性的包)相比时,发现 acset 可带来显著的性能提升。
你可以使用 LightGraphs 扩展包来保存和加载图,如下所示。 这个函数的输出是一个 LightGraphs 图对象。如果你没有使用第二个参数,就会得到一个字典,里面包含所有保存在数据文件中的图。 如果你想图可以同时被 Graphs 扩展包和 LightGraphs 扩展包所使用,那么可以将图从一种类型转换为另一种类型。 这可以通过自定义函数 G2LG()和 LG2G()来实现,这两个函数可以将图对象在 Graphs 类型和 LightGraphs 类型之间进行转换。
可以使用 LightGraphs.jl.来进行分析 julia> mg = MetaGraph(collectatoms(struc["A"], cbetaselector), 8.0) {85, 423 undirected Int64 metagraph with Float64 weights defined by :weight (default weight 1.0) julia> using LightGraphs
以本周正在做的事情作为样例,Julia 有一个非常棒的LightGraphs.jl包,用来进行图处理,但是我的合作者使用 Python 并且更喜欢使用igraph。