sf.apps.sample.waw_matrix

waw_matrix(A, w)[source]

Rescale adjacency matrix to account for node weights.

Given a graph with adjacency matrix \(A\) and a vector \(w\) of weighted nodes, this function rescales the adjacency matrix according to [9]:

\[A \rightarrow WAW,\]

with \(W=w_{i}\delta_{ij}\) the diagonal matrix formed by the weighted nodes \(w_{i}\). The rescaled adjacency matrix can be passed to sample(), resulting in a distribution that increases the probability of observing a node proportionally to its weight.

Example usage:

>>> g = nx.erdos_renyi_graph(5, 0.7)
>>> a = nx.to_numpy_array(g)
>>> a
array([[0., 1., 1., 1., 1.],
       [1., 0., 1., 1., 1.],
       [1., 1., 0., 1., 0.],
       [1., 1., 1., 0., 0.],
       [1., 1., 0., 0., 0.]])
>>> w = [10, 1, 0, 1, 1]
>>> a = waw_matrix(a, w)
>>> a
array([[ 0., 10.,  0., 10., 10.],
       [10.,  0.,  0.,  1.,  1.],
       [ 0.,  0.,  0.,  0.,  0.],
       [10.,  1.,  0.,  0.,  0.],
       [10.,  1.,  0.,  0.,  0.]])
>>> sample(a, 3, 4)
[[1, 0, 0, 1, 1], [1, 1, 0, 0, 0], [1, 1, 0, 1, 1], [1, 0, 0, 1, 0]]
Parameters
  • A (array) – adjacency matrix to rescale

  • w (array or list) – vector of real node weights

Returns

matrix rescaled according to the WAW encoding

Return type

array