Distance

This notebook illustrates the computation of distances between nodes in graphs (in number of hops).

[1]:
from IPython.display import SVG
[2]:
import numpy as np
[3]:
from sknetwork.data import miserables, painters, movie_actor
from sknetwork.path import get_distances
from sknetwork.visualization import svg_graph, svg_digraph, svg_bigraph
from sknetwork.utils import bipartite2undirected

Graphs

[4]:
graph = miserables(metadata=True)
adjacency = graph.adjacency
names = graph.names
position = graph.position
[5]:
napoleon = 1
distances = get_distances(adjacency, sources=napoleon)
[6]:
image = svg_graph(adjacency, position, names, scores = -distances, seeds=[napoleon], scale = 1.5)
SVG(image)
[6]:
../../_images/tutorials_path_distance_8_0.svg

Directed graphs

[7]:
graph = painters(metadata=True)
adjacency = graph.adjacency
names = graph.names
position = graph.position
[8]:
cezanne = 11
distances = get_distances(adjacency, sources=cezanne)
[9]:
dist_neg= {i: -d for i, d in enumerate(distances) if d < np.inf}
[10]:
image = svg_digraph(adjacency, position, names, scores=dist_neg , seeds=[cezanne])
SVG(image)
[10]:
../../_images/tutorials_path_distance_13_0.svg

Bipartite graphs

[11]:
graph = movie_actor(metadata=True)
biadjacency = graph.biadjacency
names_row = graph.names_row
names_col = graph.names_col
[12]:
adjacency = bipartite2undirected(biadjacency)
n_row, _ = biadjacency.shape
[13]:
seydoux = 9
distances = get_distances(adjacency, sources=seydoux + n_row)
[14]:
image = svg_bigraph(biadjacency, names_row, names_col, scores_col=-distances[n_row:], seeds_col=seydoux)
SVG(image)
[14]:
../../_images/tutorials_path_distance_18_0.svg