首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >SimpleHypergraphs.jl -从文本文件加载超图

SimpleHypergraphs.jl -从文本文件加载超图
EN

Stack Overflow用户
提问于 2021-05-04 05:16:34
回答 1查看 41关注 1票数 2

我正在使用SimpleHypergraphs.jl库,并尝试从csv之类的文本文件构造超图。

例如,我想从csv文件加载一个超图,如下所示:

代码语言:javascript
复制
0.0, 7.0, 0.0, 0.0
1.3, 2.8, 4.5, 0.0
0.0, 1.3, 3.1, 4.2
1.2, 0.0, 5.6, 5.0
代码语言:javascript
复制
using SimpleHypergraphs
using CSV

df = CSV.read("edge_weights.csv", DataFrame)
m = Matrix{Float64}(df)
h = Hypergraph(m)

我收到以下错误:"ERROR: MethodError: no method matching Hypergraph(::Matrix{Float64})“

我是Julia的新手,我真的希望能有一个例子来说明我是如何做到这一点的。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-04 05:56:49

作为Hypergraph构造函数传递的矩阵应该具有Union{Nothing, T}类型的元素,其中T是某种数值类型(例如Matrix{Union{Float64,Nothing}},而不仅仅是Matrix{Float64}

在SimpleHypegraphs.jl中,我们使用nothing (而不是0)来表示顶点不属于超边,因为在许多超图算法/应用程序中,顶点可能属于零权重的超边。

因此,您可以使用以下代码读取文件(为了重现性,我将文件内容放入一个文本变量中):

代码语言:javascript
复制
using DataFrames, CSV, SimpleHypergraphs

txt = """0.0, 7.0, 0.0, 0.0
1.3, 2.8, 4.5, 0.0
0.0, 1.3, 3.1, 4.2
1.2, 0.0, 5.6, 5.0"""

df = CSV.read(IOBuffer(txt), DataFrame;header=0)

mat = Matrix{Union{Float64,Nothing}}(df)

这个矩阵现在可以很容易地用作Hypergraph构造函数。

代码语言:javascript
复制
julia> h1 = Hypergraph(mat)
4×4 Hypergraph{Float64, Nothing, Nothing, Dict{Int64, Float64}}:
 0.0  7.0  0.0  0.0
 1.3  2.8  4.5  0.0
 0.0  1.3  3.1  4.2
 1.2  0.0  5.6  5.0

但是,这可能不是您所需要的,因为零(0.0)表示顶点属于具有零权重的超边的情况:

代码语言:javascript
复制
draw(h1, HyperNetX)

因此,您可能实际上希望将零转换为nothing,以表示顶点不属于超边的情况:

代码语言:javascript
复制
h2 = Hypergraph(replace(mat, 0 => nothing))

现在你得到了你想要的:

代码语言:javascript
复制
draw(h2, HyperNetX)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67375928

复制
相关文章

相似问题

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