Matrices
SimpleValueGraphs currently supports two kind of matrices from graphs: adjacency matrices that contain the topology of the graph.
Adjacency matrices
The adjacency_matrix function creates an adjacency matrix from a value graph . In contrast to Graphs.jl, this is just a immutable matrix view of the graph, i.e if the graph changes, then so does this matrix. Therefore to get a mutable adjacency matrix one has to convert it before to some other matrix type.
It is also possible to use the constructor AdjacencyMatrix to create a view of any Graphs.AbstractGraph.
julia> g1 = SimpleValueGraphs.swissmetro_graph();
julia> adjacency_matrix(g)
6×6 AdjacencyMatrix{ValGraph{[...]}:
0 0 0 0 0 1
0 0 0 1 0 1
0 0 0 1 0 0
0 1 1 0 0 0
0 0 0 0 0 1
1 1 0 0 1 0
julia> g2 = smallgraph(:housex)
{5, 8} undirected simple Int64 graph
julia> AdjacencyMatrix(g2)
5×5 AdjacencyMatrix{SimpleGraph{Int64}}:
0 1 1 1 0
1 0 1 1 0
1 1 0 1 1
1 1 1 0 1
0 0 1 1 0Value matrices
One can also create a matrix view of the edge values of a graph, where entry (i,j) of the matrix contains the edge value of the edge i -> j. Entries in the matrix for non-existing edges are represented by some extra value.
julia> g = ValGraph(3, edgeval_types = (a = Int, b = String));
julia> add_edge!(g, 1, 2, (a=10, b="abc"))
true
julia> add_edge!(g, 1, 3, (a=20, b="xyz"))
true
julia> ValMatrix(g, :a, 0)
3×3 ValMatrix{Int64,ValGraph{[...]},:a}:
0 10 20
10 0 0
20 0 0
julia> ValMatrix(g, :b, nothing)
3×3 ValMatrix{Union{Nothing, String},ValGraph{[...]},:b}:
nothing "abc" "xyz"
"abc" nothing nothing
"xyz" nothing nothingOne can also use the Graphs.weights function to obtain this matrix. If the graph does not have any edge values, this returns a Graphs.DefaultDistance instead.
julia> weights(g1, :a)
3×3 ValMatrix{Int64,ValDiGraph{[...]},:a}:
0 10 0
0 0 20
0 0 0
julia> g2 = ValDiGraph(3);
julia> add_edge!(g2, 1, 2);
julia> weights(g2)
3 × 3 default distance matrix (value = 1)