This documents an unmaintained version of NetworkX. Please upgrade to a maintained version and see the current NetworkX documentation.


spectral_graph_forge(G, alpha, transformation='identity', seed=None)[source]

Returns a random simple graph with spectrum resembling that of G

This algorithm, called Spectral Graph Forge (SGF), computes the eigenvectors of a given graph adjacency matrix, filters them and builds a random graph with a similar eigenstructure. SGF has been proved to be particularly useful for synthesizing realistic social networks and it can also be used to anonymize graph sensitive data.

  • G (Graph)
  • alpha (float) – Ratio representing the percentage of eigenvectors of G to consider, values in [0,1].
  • transformation (string, optional) – Represents the intended matrix linear transformation, possible values are ‘identity’ and ‘modularity’
  • seed (integer, random_state, or None (default)) – Indicator of numpy random number generation state. See Randomness.

H – A graph with a similar eigenvector structure of the input one.

Return type:



NetworkXError – If transformation has a value different from ‘identity’ or ‘modularity’


Spectral Graph Forge (SGF) generates a random simple graph resembling the global properties of the given one. It leverages the low-rank approximation of the associated adjacency matrix driven by the alpha precision parameter. SGF preserves the number of nodes of the input graph and their ordering. This way, nodes of output graphs resemble the properties of the input one and attributes can be directly mapped.

It considers the graph adjacency matrices which can optionally be transformed to other symmetric real matrices (currently transformation options include identity and modularity). The modularity transformation, in the sense of Newman’s modularity matrix allows the focusing on community structure related properties of the graph.

SGF applies a low-rank approximation whose fixed rank is computed from the ratio alpha of the input graph adjacency matrix dimension. This step performs a filtering on the input eigenvectors similar to the low pass filtering common in telecommunications.

The filtered values (after truncation) are used as input to a Bernoulli sampling for constructing a random adjacency matrix.


[1]L. Baldesi, C. T. Butts, A. Markopoulou, “Spectral Graph Forge: Graph Generation Targeting Modularity”, IEEE Infocom, ‘18. https://arxiv.org/abs/1801.01715
[2]M. Newman, “Networks: an introduction”, Oxford university press, 2010


>>> import networkx as nx
>>> G = nx.karate_club_graph()
>>> H = nx.spectral_graph_forge(G, 0.3)