首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Julia中从邻接矩阵生成加权和有向网络

在Julia中从邻接矩阵生成加权和有向网络
EN

Stack Overflow用户
提问于 2018-09-19 02:34:59
回答 2查看 1.7K关注 0票数 2

我想从Julia (v0.7)中的邻接矩阵生成一个加权和有向网络。

到目前为止,我已经尝试过:

代码语言:javascript
复制
using LightGraphs
using SimpleWeightedGraphs

A = rand(100, 100)
G = Graph(A)

但我得到了错误:

代码语言:javascript
复制
ERROR: ArgumentError: Adjacency / distance matrices must be symmetric
Stacktrace:
 [1] SimpleGraph{Int64}(::Array{Float64,2}) at /home/user/.julia/packages/LightGraphs/PPsyP/src/SimpleGraphs/simplegraph.jl:78
 [2] SimpleGraph(::Array{Float64,2}) at /home/user/.julia/packages/LightGraphs/PPsyP/src/SimpleGraphs/simplegraph.jl:72
 [3] top-level scope at none:0

到目前为止,我只在github (https://github.com/JuliaGraphs/SimpleWeightedGraphs.jl)页面上看到过该示例,该页面从和边列表生成加权图。但是,如果我可以直接从邻接矩阵生成图形,我会更喜欢。

EN

回答 2

Stack Overflow用户

发布于 2018-09-19 03:02:22

虽然不是Julia图形专家,但我认为你想要的是

代码语言:javascript
复制
julia> A = rand(100,100);

julia> G = SimpleWeightedDiGraph(A)
{100, 10000} directed simple Int64 graph with Float64 weights

Graph(a::AbstractMatrix)是无向(单位加权)图的构造函数:

代码语言:javascript
复制
julia> A = A+transpose(A); # making A symmetric

julia> G = Graph(A)
{100, 5050} undirected simple Int64 graph

julia> weights(G)
100 × 100 default distance matrix (value = 1)
票数 2
EN

Stack Overflow用户

发布于 2018-09-19 07:44:27

你遇到的第一个问题是你的随机邻接矩阵是不对称的,这是无向图所必需的。你想创建一个有向图。

其次,如果需要加权图,则需要使用SimpleWeightedGraphs.jl包,这意味着您可以简单地执行以下操作

代码语言:javascript
复制
julia> using LightGraphs, SimpleWeightedGraphs

julia> a = rand(100,100);

julia> g = SimpleWeightedDiGraph(a)
{100, 10000} directed simple Int64 graph with Float64 weights

但请注意,这是创建随机加权图的一种非常糟糕的方法,因为rand函数几乎可以保证这将是一个完整的图。更好的方法是使用sprand

代码语言:javascript
复制
julia> using SparseArrays

julia> a = sprand(100, 100, 0.2);

julia> g = SimpleWeightedDiGraph(a)
{100, 2048} directed simple Int64 graph with Float64 weights
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52392693

复制
相关文章

相似问题

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