gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 07:42:42 28 4
gpt4 key购买 nike

我正在使用 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, 0.0, 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}} 而不仅仅是 Matrix{Float64}
在 SimpleHypegraphs.jl 中,我们使用 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, 0.0, 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, 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 ) 表示顶点属于零权重的超边的情况:
draw(h1, HyperNetX)
enter image description here
因此,您可能实际上想要将零转换为 nothing s 表示顶点不属于超边的情况:
h2 = Hypergraph(replace(mat, 0 => nothing))
现在你得到了你想要的:
draw(h2, HyperNetX)
enter image description here

关于julia - SimpleHypergraphs.jl - 从文本文件加载超图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67375928/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com