微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决SimpleHypergraphs.jl - 从文本文件加载超图

我正在使用 SimpleHypergraphs.jl 库并尝试从文本文件(例如 csv)构建超图。

例如,我想从这样的 csv 文件加载超图:

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,5.6,5.0
using SimpleHypergraphs
using CSV

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

我收到以下错误: “错误方法错误:没有方法匹配 Hypergraph(::Matrix{Float64})”

我是 Julia 的新手,我非常感谢我如何实现这一目标的示例。谢谢!

解决方法

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

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

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

0

这个矩阵现在可以很容易地用作 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,5.6,5.0""" df = CSV.read(IOBuffer(txt),DataFrame;header=0) mat = Matrix{Union{Float64,Nothing}}(df) 构造函数。

Hypergraph

但是,这可能不是您所需要的,因为零 (julia> h1 = Hypergraph(mat) 4×4 Hypergraph{Float64,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

enter image description here

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

nothing

现在你得到了你想要的:

h2 = Hypergraph(replace(mat,0 => nothing))

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。